2009-09-14 28 views
1

我有一個結構,它的一個成員是char * *(2d指針)。我從EXE1中分配空間並用數據調用EXE2。我使用memcpy來獲取EXE2上的所有數據。雖然EXE2上的char **數據不存在,但兩個EXE上的內存地址都相同(可以說是0x013740b0)。如何檢索EXE2上的數據?可執行文件之間的數據(ANSI C,MFC 4.1)

由於提前, 防曬

回答

6

每個EXE是有它自己的虛擬地址空間,你可以不喜歡共享指針和任何地址,您看到的不是一個物理地址,它是虛擬地址。這個虛擬地址將被翻譯成不同物理地址的不同exes。您可以使用shared memory在不同進程之間共享數據。

0

我認爲你不能指anoher內存地址在另一個可執行文件直接,如果你想這個行爲,你必須做出共享的DLL,並把你的結構在一個共享的地方

+0

不會工作,要麼在一個應用程序中每個DLL也有它自己的地址空間。 – jdehaan 2009-09-14 10:53:24

+0

是的,但你可以聲明全局部分! – 2009-09-14 10:54:45

+0

這是一個非常骯髒的黑客。與正確的共享內存不同,DLL共享數據部分繞過了NT安全模型。 – MSalters 2009-09-14 13:16:42

1

Naveen是正確的。

你可以嘗試這樣的事情:

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對於進程是全局的(在Win16-> Win32轉換之後,與LocalAlloc的區別變得理論化)。 EXE2擁有自己獨特的「全局」地址。 ---另外,你不需要GlobalLock在Win32 – MSalters 2009-09-14 13:15:16

+0

@ MSalters中,我不這麼認爲。例如,MSDN示例使用GlobalAlloc傳遞剪貼板數據。 – 2009-09-14 13:36:52

相關問題