我试着做两个进程通讯的程序,但是MapViewOfFile返回的LPVOID指针lpview,用memcpy((BYTE*)lpview+4,datafilepath,lstrlen(datafilepath+1));写入数据时,vc6.0老是在lpview+4处报error C2666: '+' : 4 overloads have similar conversions
Error executing cl.exe.
此外,将lpview改为tchar型后,不用memcpy函数,改用字符串后,OpenFileMapping打开映象文件时总是打不开,返回空值。
这是怎么一回事,请高手指点迷津。

解决方案 »

  1.   

    多加几个括号……
    (((BYTE*)lpview)+4,datafilepath,lstrlen(datafilepath)+sizeof(TCHAR));
      

  2.   

    补充一下,当用OpenFileMapping(FILE_MAP_READ,FALSE,"demo_filemapping")时,返回值为null,getlasterror返回值为2
      

  3.   

    2 The system cannot find the file specified.  ERROR_FILE_NOT_FOUND 
    你的文件映射还没有创建吧……
      

  4.   

    你没有创建:
    switch (wmId)
    {
    case ID_CREATE:
    hFileMap=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,4*1024,TEXT("MY_SHARE"));
    if(hFileMap!=NULL)
    {
    if(GetLastError()==ERROR_ALREADY_EXISTS)
    {
    MessageBox(hWnd,TEXT("Mapping already exists - not created."),TEXT("MAP"),NULL);
    CloseHandle(hFileMap);
    }
    else
    {
    lpView=MapViewOfFile(hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
    if(lpView!=NULL)
    {
    strcpy((char*)lpView,TEXT("TEST001"));
    UnmapViewOfFile((LPVOID)lpView);
    }
    else
    {
    MessageBox(hWnd,TEXT("Can not map view of file"),TEXT("MAP"),NULL);
    }
    }
    }
    else
    {
    MessageBox(hWnd,TEXT("Can not create file map"),TEXT("MAP"),NULL);
    }
    break;
    case ID_OPEN:
    hFileMapOpen=OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,TEXT("MY_SHARE"));
    if(hFileMapOpen!=NULL)
    {
    lpView=NULL;
    lpView=MapViewOfFile(hFileMapOpen,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
    if(lpView!=NULL)
    {
    MessageBox(hWnd,(LPCTSTR)lpView,TEXT("READ MAP"),NULL);
    }
    else
    {
    MessageBox(hWnd,TEXT("CAN not open map view"),TEXT("READ MAP"),NULL);
    }
    CloseHandle(hFileMapOpen);
    }
    else
    {
    MessageBox(hWnd,TEXT("CAN NOT OPEN MAP"),TEXT("READ MAP"),NULL);
    }
    break;
      

  5.   

    谢谢各位大侠指点,不好意思现在才结帖,请原谅。
     jiangsheng(蒋晟.Net)  25分,: hzfxjun(飞天)25分