进程一:
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 这个无效, 我实在找不到哪里有错误了,请大家帮帮忙

解决方案 »

  1.   

    lpcs是另一进程中的指针,不同进程中不能直接使用指针,你可以把指针指向的数据先复制到共享内存中,然后另一进程从共享内存中读取数据。
      

  2.   

    谢谢ls的, 那是不是说 我应该这样写呢?
    memcpy(pView, (const void*)(((CBT_CREATEWND*)lParam)->lpcs), sizeof(CREATESTRUCT));
      

  3.   

    这样也不行。如果你要得到lpszName,就把lpszName复制到共享内存;如果你要得到很多数据,可以自己定义一个结构,把结构复制到共享内存,但要注意,结构中不要包含指针类型的成员。
      

  4.   

    你的memcpy只拷贝了指针,而没有复制内容。
      

  5.   

    谢谢。
    你的意思是说如果要复制, 复制的一定要是数据,而不能是指针?
    也就是说,如果只想得到lpszName, 应该这样写?
    memcpy(pView, (const void*)(((CBT_CREATEWND*)lParam)->lpcs->lpszName), MAX_PATH);
      

  6.   


    不是吧? memcpy()不是将源地址的size个数据拷贝到目的地址嘛?