Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可执行文件之间的数据(ANSI C,MFC 4.1)_C++_Mfc - Fatal编程技术网

C++ 可执行文件之间的数据(ANSI C,MFC 4.1)

C++ 可执行文件之间的数据(ANSI C,MFC 4.1),c++,mfc,C++,Mfc,我有一个结构,它的一个成员是char**(2d指针)。我从EXE1分配空间,并用数据调用EXE2。我使用memcpy获取EXE2上的所有数据。两个EXE上的内存地址相同(比如0x013740b0),但EXE2上的char**数据不存在。如何检索EXE2上的数据 提前感谢,, SunScreen您不能共享这样的指针,因为每个exe都有自己的虚拟地址空间,无论您看到的是什么地址,都不是物理地址,而是虚拟地址。此虚拟地址将在不同的EXE中转换为不同的物理地址。您可以使用在不同进程之间共享数据。您不能共

我有一个结构,它的一个成员是char**(2d指针)。我从EXE1分配空间,并用数据调用EXE2。我使用memcpy获取EXE2上的所有数据。两个EXE上的内存地址相同(比如0x013740b0),但EXE2上的char**数据不存在。如何检索EXE2上的数据

提前感谢,,
SunScreen

您不能共享这样的指针,因为每个exe都有自己的虚拟地址空间,无论您看到的是什么地址,都不是物理地址,而是虚拟地址。此虚拟地址将在不同的EXE中转换为不同的物理地址。您可以使用在不同进程之间共享数据。

您不能共享这样的指针,因为每个exe都有自己的虚拟地址空间,并且您看到的任何地址都不是物理地址,而是虚拟地址。此虚拟地址将在不同的EXE中转换为不同的物理地址。您可以使用在不同的进程之间共享数据。

我认为您不能直接引用另一个可执行文件中的另一个内存地址,如果您想要这种行为,您必须创建共享dll并将您的结构放在共享位置

我认为您不能直接引用另一个可执行文件中的另一个内存地址,如果您想要这种行为,您必须创建共享dll并将您的结构放在共享位置

是正确的

您可以尝试以下方法:

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

  /* do something with the buffer */
  void* buf = (void*)GlobalLock(hglbBuf);
  // ...
  GlobalUnlock(hglbBuf);
这是正确的

您可以尝试以下方法:

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

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

这也不行,因为在应用程序中,每个DLL都有自己的地址空间。这是一个相当肮脏的黑客行为。与适当的共享内存不同,DLL共享数据部分绕过NT安全模型。这也不起作用,因为在应用程序中,每个DLL都有自己的地址空间。这是一个相当肮脏的黑客行为。与适当的共享内存不同,DLL共享数据节绕过NT安全模型。No-GLobalAlloc对进程是全局的(与LocalAlloc的区别在Win16->Win32转换后成为理论性的)。EXE2有自己独特的“全局”地址。--另外,你不需要GlobalLockWin32@MSalters,我不这么认为。例如,MSDN示例使用GlobalAlloc传递剪贴板数据。否-GlobalAlloc对进程是全局的(与LocalAlloc的差异在Win16->Win32转换后成为理论性的)。EXE2有自己独特的“全局”地址。--另外,你不需要GlobalLockWin32@MSalters,我不这么认为。例如,MSDN示例使用GlobalAlloc传递剪贴板数据。