2009-09-14 2 views
1

구조체가 있고 멤버가 char * * (2d 포인터)입니다. EXE1에서 공간을 할당하고 EXE2를 호출합니다. memcpy를 사용하여 EXE2의 모든 데이터를 가져옵니다. EXE2의 char ** 데이터는 존재하지 않지만 EXE 양쪽의 메모리 주소는 동일합니다 (0x013740b0을 말하십시오). EXE2에서 데이터를 검색하려면 어떻게해야합니까? 사전에실행 파일 (ANSI C, MFC 4.1) 사이의 데이터

감사합니다, 각각의 exe는 자신의 가상 주소 공간을 데 같이 그렇게 포인터를 공유 할 수 없습니다

답변

6

자외선 차단제와 어떤 주소를 당신이보고있는, 그것은 가상 주소를 물리적 주소가 없습니다. 이 가상 주소는 다른 exes에서 다른 실제 주소로 변환됩니다. shared memory을 사용하여 서로 다른 프로세스간에 데이터를 공유 할 수 있습니다.

0

나는 당신이이 동작을 원하는 경우 공유 DLL을하고

+0

는 응용 프로그램에서 각 DLL은 자신의 주소 공간도이 중 하나. – jdehaan

+0

네,하지만 글로벌 섹션을 선언 할 수 있습니다 !!! –

+0

그건 상당히 더러운 해킹입니다. 적절한 공유 메모리와 달리 DLL 공유 데이터 섹션은 NT 보안 모델을 우회합니다. – MSalters

1

Naveen가 올바른지 공유 장소에 구조를 넣어 가지고, 직접 다른 실행 파일에 anoher 메모리 주소를 참조 할 수 있다고 생각합니다.

당신은 이런 식으로 뭔가를 시도 할 수 있습니다 : 작동하지 않습니다

HGLOBAL hglbBuf = GlobalAlloc(GMEM_MOVEABLE, buffer_size); 
    if ( hglbBuf == NULL ) { 
    // ... 
    return; 
    } 

    /* do something with the buffer */ 
    void* buf = (void*)GlobalLock(hglbBuf); 
    // ... 
    GlobalUnlock(hglbBuf); 
+0

없음 - GlobalAlloc에은 (되는 LocalAlloc과의 차이가 Win16->는 Win32 전환 후 이론이되었다) 과정에 글로벌 없다. EXE2는 독자적인 "글로벌"주소를 가지고 있습니다. --- 또한, Win32에서 – MSalters

+0

@MSalters, 나는 그렇게 생각하지 않아요 GlobalLock 필요하지 않습니다. 예를 들어 MSDN 샘플은 GlobalAlloc을 사용하여 클립 보드 데이터를 전달합니다. –