我有一個結構,它的一個成員是char * *(2d指針)。我從EXE1中分配空間並用數據調用EXE2。我使用memcpy來獲取EXE2上的所有數據。雖然EXE2上的char **數據不存在,但兩個EXE上的內存地址都相同(可以說是0x013740b0)。如何檢索EXE2上的數據?可執行文件之間的數據(ANSI C,MFC 4.1)
由於提前, 防曬
我有一個結構,它的一個成員是char * *(2d指針)。我從EXE1中分配空間並用數據調用EXE2。我使用memcpy來獲取EXE2上的所有數據。雖然EXE2上的char **數據不存在,但兩個EXE上的內存地址都相同(可以說是0x013740b0)。如何檢索EXE2上的數據?可執行文件之間的數據(ANSI C,MFC 4.1)
由於提前, 防曬
每個EXE是有它自己的虛擬地址空間,你可以不喜歡共享指針和任何地址,您看到的不是一個物理地址,它是虛擬地址。這個虛擬地址將被翻譯成不同物理地址的不同exes。您可以使用shared memory在不同進程之間共享數據。
我認爲你不能指anoher內存地址在另一個可執行文件直接,如果你想這個行爲,你必須做出共享的DLL,並把你的結構在一個共享的地方
Naveen是正確的。
你可以嘗試這樣的事情:
HGLOBAL hglbBuf = GlobalAlloc(GMEM_MOVEABLE, buffer_size);
if ( hglbBuf == NULL ) {
// ...
return;
}
/* do something with the buffer */
void* buf = (void*)GlobalLock(hglbBuf);
// ...
GlobalUnlock(hglbBuf);
否 - GLobalAlloc對於進程是全局的(在Win16-> Win32轉換之後,與LocalAlloc的區別變得理論化)。 EXE2擁有自己獨特的「全局」地址。 ---另外,你不需要GlobalLock在Win32 – MSalters 2009-09-14 13:15:16
@ MSalters中,我不這麼認爲。例如,MSDN示例使用GlobalAlloc傳遞剪貼板數據。 – 2009-09-14 13:36:52
不會工作,要麼在一個應用程序中每個DLL也有它自己的地址空間。 – jdehaan 2009-09-14 10:53:24
是的,但你可以聲明全局部分! – 2009-09-14 10:54:45
這是一個非常骯髒的黑客。與正確的共享內存不同,DLL共享數據部分繞過了NT安全模型。 – MSalters 2009-09-14 13:16:42