进程一:
HANDLE myEvent=CreateEvent(NULL, FALSE, FALSE, _T("niuniu's event"));
HANDLE hFileMapping=CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
PAGE_READWRITE, 0, sizeof(CBT_CREATEWND), _T("niuniu's filemapping"));
if(hFileMapping!=NULL)
{
WaitForSingleObject(myEvent, INFINITE);
PVOID pView=MapViewOfFile(hFileMapping, FILE_MAP_WRITE |FILE_MAP_READ, 0, 0, 0);
CBT_CREATEWND* cbtc=(CBT_CREATEWND*)pView;
CString temp;
temp+=_T("d:\\");
temp+=cbtc->lpcs->lpszName;
CreateFile(temp, 0, NULL, NULL, CREATE_ALWAYS, 0, NULL);
}进程二:
HANDLE myEvent=OpenEvent(EVENT_ALL_ACCESS, FALSE, _T("niuniu's event"));
HANDLE myFileMapping=OpenFileMapping(FILE_MAP_READ |FILE_MAP_WRITE, FALSE, _T("niuniu's filemapping"));
PVOID pView=MapViewOfFile(myFileMapping, FILE_MAP_WRITE |FILE_MAP_READ, 0, 0, 0);
memcpy(pView, (const void*)lParam, sizeof(CBT_CREATEWND));
UnmapViewOfFile(pView);
SetEvent(myEvent);
CloseHandle(myEvent);
错误提示:cbtc->lpcs->lpszName 这个无效, 我实在找不到哪里有错误了,请大家帮帮忙
HANDLE myEvent=CreateEvent(NULL, FALSE, FALSE, _T("niuniu's event"));
HANDLE hFileMapping=CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
PAGE_READWRITE, 0, sizeof(CBT_CREATEWND), _T("niuniu's filemapping"));
if(hFileMapping!=NULL)
{
WaitForSingleObject(myEvent, INFINITE);
PVOID pView=MapViewOfFile(hFileMapping, FILE_MAP_WRITE |FILE_MAP_READ, 0, 0, 0);
CBT_CREATEWND* cbtc=(CBT_CREATEWND*)pView;
CString temp;
temp+=_T("d:\\");
temp+=cbtc->lpcs->lpszName;
CreateFile(temp, 0, NULL, NULL, CREATE_ALWAYS, 0, NULL);
}进程二:
HANDLE myEvent=OpenEvent(EVENT_ALL_ACCESS, FALSE, _T("niuniu's event"));
HANDLE myFileMapping=OpenFileMapping(FILE_MAP_READ |FILE_MAP_WRITE, FALSE, _T("niuniu's filemapping"));
PVOID pView=MapViewOfFile(myFileMapping, FILE_MAP_WRITE |FILE_MAP_READ, 0, 0, 0);
memcpy(pView, (const void*)lParam, sizeof(CBT_CREATEWND));
UnmapViewOfFile(pView);
SetEvent(myEvent);
CloseHandle(myEvent);
错误提示:cbtc->lpcs->lpszName 这个无效, 我实在找不到哪里有错误了,请大家帮帮忙
memcpy(pView, (const void*)(((CBT_CREATEWND*)lParam)->lpcs), sizeof(CREATESTRUCT));
你的意思是说如果要复制, 复制的一定要是数据,而不能是指针?
也就是说,如果只想得到lpszName, 应该这样写?
memcpy(pView, (const void*)(((CBT_CREATEWND*)lParam)->lpcs->lpszName), MAX_PATH);
不是吧? memcpy()不是将源地址的size个数据拷贝到目的地址嘛?