作了一个简单内存共享的程序,为什么输出的时候不能显示共享的内容?
部分代码如下:
void CCSocketDlg::OnDataReadyMsg(WPARAM wParam, LPARAM lParam)
{
    char RecvBuf[10];
    CString recvstr;
    HANDLE m_hReceiveMap;
    LPBYTE m_lpbReceiveBuf;
    m_hReceiveMap = OpenFileMapping(FILE_MAP_READ, FALSE, "DataMap");
    if (m_hReceiveMap == NULL)
       return;
m_lpbReceiveBuf = (LPBYTE)MapViewOfFil(m_hReceiveMap,FILE_MAP_READ,0,0,0);
    if (m_lpbReceiveBuf == NULL)
{
     CloseHandle(m_hReceiveMap);
     m_hReceiveMap=NULL;
}
memcpy(RecvBuf, (char*)(m_lpbReceiveBuf), (int)lParam);
recvstr.Format("接收到的信息为%s",(char*)RecvBuf);
~~~~~~~~~~~~~~~~~~~~~~~~为什么这里显示的是:接收到的信息为(后面是一些空白,我拷过来就是这些: )
    UnmapViewOfFile(m_lpbReceiveBuf);
    m_lpbReceiveBuf = NULL;
    CloseHandle(m_hReceiveMap);
    m_hReceiveMap = NULL;
}谢了先

解决方案 »

  1.   

    你确信在用memcpy()之时内存映射成功了吗?因为你的程序不管if (m_lpbReceiveBuf == NULL)是否成功,都会运行memcpy()。是个编程的逻辑错误!
      

  2.   

    我改成if (m_lpbReceiveBuf != NULL),怎么还是这样的呢??
      

  3.   

    当然一样,你应该if (m_lpbReceiveBuf == NULL){return;}否则memcpy()这一句总要运行,在不明白画画流程图:)
      

  4.   

    我估计可能和你那几个汉字有关,你把CString.Format()中间的汉字改成英文或者删掉试一下
      

  5.   

    to  mythay(小黑) (改成if (m_lpbReceiveBuf == NULL){return;}也还是那样
    to  bulepaper(雷鸟) 改成英文也没用。问题到底出在哪呢
      

  6.   

    奇怪的是,我调试的时候出现这么个对话框:
    one or more breakpoint can not be set and have been disabled Execution will stop at the beginning of the program。
    可我的是debug版啊!
      

  7.   

    哦,调试的时候发现 memcpy(RecvBuf, (char*)(m_lpbReceiveBuf), (int)lParam);
    并没有将数据拷到数组中,不知是什么原因??