我向一个Window传message,向传过去一个string.
可是进入消息相应函数都正常,就是读不出参数?代码如下:
HGLOBAL hglFilename ;
hglFilename = ::GlobalAlloc(GHND,strFileName.GetLength()+1);
LPSTR pbuf = (LPSTR)::GlobalLock(hglFilename);
::strcpy( pbuf , strFileName );
::GlobalUnlock( hglFilename );
SendMessage(hWnd,WM_PM_OPENFILE, 0,(LPARAM)hglFilename);请问是不是由于不在一个地址空间,传指针无效?那位高人有什么办法可以传String?

解决方案 »

  1.   

    WM_COPYDATAhttp://search.csdn.net/expert/topic/50/5005/2002/6/9/790222.htm
      

  2.   

    可以考虑把定义一个全局得CString.然后还是传送int型的值,在消息循环中例如windowproc中判断一下在调用CString的变量.
      

  3.   

    楼主的方法是正确的,剪切板就是那样传数据的,再检查一下:试试
    GlobalAlloc(GMEM_MOVEABLE,strFileName.GetLength()+1);
      

  4.   

    刚做了一个在不同进程间传递指针的, 可参考一下
    http://expert.csdn.net/Expert/topic/2028/2028974.xml?temp=.4461786
      

  5.   

    定义一个结构体
    typedef struct _Obj
    {
      CString Cs_Temp;
    }Obj
    Obj  tempObj;
    tempObj.Cs_Temp="发送字符"然后
    sendMessage(WM_MY_MESSAGE,lparam,(LPVOID)tempObj);接收到的时候再(tObj*)tempObj
      

  6.   

    m_hFileMaping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0,     MAX_PATH+32, _T("share_memory_mdclient")); LPVOID lpBuf = MapViewOfFile(m_hFileMaping, FILE_MAP_WRITE, 0, 0, MAX_PATH);
    memset(lpBuf, 0, MAX_PATH);
    memcpy(lpBuf, lpcszFileName, _tcslen(lpcszFileName));

    PostThreadMessage(m_playProcess.dwThreadId, WM_PLAY_FILE1, 0, (long)(LPCTSTR)m_strCurrentFile);
    //传送方
    HANDLE h = OpenFileMapping(FILE_MAP_READ, FALSE, _T("share_memory_mdclient"));
    if (h != NULL)
    {
    LPVOID lpBuf = MapViewOfFile(h, FILE_MAP_READ, 0, 0, MAX_PATH);
    char szFileName[MAX_PATH];
    memcpy(szFileName, lpBuf, MAX_PATH);
    //接收方
    我是这么实现跨进程传递数据的