C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[68233] Re:Re:[Q]프로세스 데이터 공유
NeoDreamer [asurada] 1394 읽음    2012-09-24 11:59
자세한 답변 감사드립니다.
예제를 열심히 분석해 봐야 겠네요. 감사합니다.

빌더(TWx) 님이 쓰신 글 :
: NeoDreamer 님이 쓰신 글 :
: : 하나의 프로세스가 있는데 이 프로세스에 모듈로(어떤 형식으로든) 붙는 녀석이 메인 프로세서의 메모리 영역에 있는 데이터를 자유자재로 접근하여 사용할 수 있는 방법(기술)이 있을까요?
:
:
:
:
: 프로세스 바운드리 간에 데이터 공유라면 "Shared Section"을 이용해서 처리하면 되겠지만...
:
: 질문의 요지로 봐서는 메인 프로세스에서 정의 되어있는 데이타를 In-Process 형태로 프로세스의 어드레스 공간에 매핑되는
:
: DLL 모듈에서 사용하고자 함으로 보이는데요...
:
:
: Exe 모듈에서도 어떤 데이타에 대해서 Export Section에 엔트리를 생성할 수 있다는 것을 알고 있다면 문제는 쉽게 해결 됩니다.
:
: 메인 Exe 프로세스 모듈에서... 다음과 같은 식으로 데이타 엔트리가 Export Section에 생성되도록 합니다.
:
:
: 
: ...
: 
: extern "C" {
: __declspec(dllexport) char *SomeDataFromExe = "Some Data From Exe Process...";
: }
: ...
: 

:
: extern "C"로 지정했으므로 컴파일러가 _SomeDataFromExe 라는 엔트리를 실행파일의 Export Table에 생성하게 되겠죠.
:
:
: Exe 모듈에서 Export 하고있는 데이타를 DLL 모듈에서 사용하기 위해선 아래와 같은 방법을 쓰면 됩니다.
:
:
:
: 
: ...
: 
: char *SomeDataFromExe = NULL;
: 
: extern "C" int _libmain(unsigned long reason)
: {
: 	HMODULE hExeModule = GetModuleHandle(NULL);
: 	char **p = (char**)GetProcAddress( hExeModule, "_SomeDataFromExe");
: 
: 	if ( p && reason == DLL_PROCESS_ATTACH ) {
: 	   SomeDataFromExe = *p;
: 	   MessageBoxA(NULL, SomeDataFromExe, "MessageBox", MB_OK);
: 	}
: 	return 1;
: }
: ...
: 

:
: 'GetModuleHandle(NULL)'을 하게 되면 DLL을 로드한 Exe 모듈의 베이스 어드레스가 리턴되고...
:
: Exe 모듈에서 char * 타입으로 데이타를 Export 하고 있으니까 실제적인 주소는 char ** 로 얻어야 하고요...
:
:
:
: RAD XE2로 빌드한 테스트 프로젝트 같이 첨부하니까 확인해 보세요.
:
:
:
:
:
: ...

+ -

관련 글 리스트
68206 [Q]프로세스 데이터 공유 NeoDreamer 1278 2012/09/20
68227     Re:[Q]프로세스 데이터 공유 빌더(TWx) 1476 2012/09/22
68233         Re:Re:[Q]프로세스 데이터 공유 NeoDreamer 1394 2012/09/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.