假设我在 foobar-shared.lib 中有这个类:
class FooBar {
std::string m_helloWorld;
}
我在 foobar-from.exe 中使用 SendCopyData 调用,如下所示:
extern HWND hMainWnd; // foobar-from.exe
{
FooBar fooBar;
HWND hWnd = FindAppWindow(); // foobar-to.exe
COPYDATASTRUCT cds;
cds.dwData = ('f'|('o'<<8)|('o'<<16));
cds.cbData = sizeof(FooBar);
cds.lpData = (LPVOID)fooBar;
SendCopyData(hWnd, (WPARAM)hMainWnd, (LPARAM)&cds);
}
当从 foobar-to.exe 时,我处理 OnCopyData:
BOOL CMainFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) {
if (pCopyDataStruct->dwData==('f'|('o'<<8)|('o'<<16))) {
FooBar fooBar = *(FooBar *)pCopyDataStruct->lpData;
}
}
当 FooBar 是一个结构时,这工作得很好,但是现在它是一个类,我得到了这个错误:
First-chance exception at 0x0064ef81 in foobar-to.exe: 0xC0000005:
Access violation reading location 0x0231dd7c.
我最初假设这是因为我的fooBar
实例在堆栈上,所以我尝试将它移动到堆中,但得到了一个稍微不同的错误(如果需要,我可以在此处发布结果)。
根据MSDN的说法,“传递的数据不得包含指向接收数据的应用程序无法访问的对象的指针或其他引用。” 所以我怀疑这只有结构数据才有可能。我对么?