可以说我有这个类在foobar的-shared.lib:我可以使用WM_COPYDATA复制一个非结构体吗?
class FooBar {
std::string m_helloWorld;
}
而且我在foobar的-from.exe使用SendCopyData像这样的电话:从foobar-
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);
}
当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,“正在传递的数据不得包含指向接收数据的应用程序无法访问的对象的指针或其他引用”。所以我怀疑这只适用于结构数据。我对么?