问题如题目,我自己写了个服务,然后想和另外一个应用程序使用共享内存交互,但是出现了问题。

解决方案 »

  1.   

    我日志记录了共享内存的地址,发现了问题,那个地址hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 2048000, _T("gftestftp"));
    ptChar = (TCHAR* )MapViewOfFile(hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
    if (hFileMap!=NULL)
    {
    ZeroMemory(da,256);
    sprintf(da,"0x%08x",(int)hFileMap);
    loggf.Log(da);
    }
    if (ptChar!=NULL)
    {
    ZeroMemory(da,256);
    sprintf(da,"0x%08x",(int)ptChar);
    loggf.Log(da);
    }日志记录内容如下:
    #-----------------------------2012-12-18 14:17:21-----------------------------#
    0x0000003c#-----------------------------2012-12-18 14:17:21-----------------------------#
    0x009b0000
      

  2.   

    HANDLE hFileMap = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, _T("gftestftp"));
    TCHAR* ptChar1 = (TCHAR* )MapViewOfFile(hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
    len=lstrlen(ptChar1);
    sprintf(da,"内容长度是%d",len);
    loggf.Log(da);
    ZeroMemory(da,256);
    WideCharToMultiByte(CP_ACP, 0, ptChar1, -1, da, len, NULL, NULL);
    loggf.Log(da);我在写内存的代码下面加了如下的代码,结果可以读到内容。
    #-----------------------------2012-12-18 14:29:49-----------------------------#
    内容长度是13#-----------------------------2012-12-18 14:29:49-----------------------------#
    aE:\software\也就是服务可以读到服务的共享内存,但是换成应用程序,读不到,擦他大爷的。
      

  3.   

    原谅我爆粗口,版主啊,如果我就是要使用服务来快速的和应用程序交换数据,那么除了内存,有没有别的办法,别说socket,内核态的中断转换耗费cpu太厉害。
      

  4.   

    你服务端创建的时候需要用Global全局前缀
    http://msdn.microsoft.com/en-us/library/aa366791(VS.85).aspx