進程間通訊及數據共享

今天看到幾個關於共享內存的BLOG,感覺寫的不錯。而之前又弄了幾天這個問題,於是說一下自己當時的處理辦法。

由於當時沒有細看MSDN上WM_COPYDATA 的處理,於是選擇了另一種辦法。而其實,當時老大的意思也是用WM_COPYDATA。

 

直接在另一個進程中進行數據分配:

VirtualAllocEx()

 

void ceDesktopxCore::postIPCMsg(HWND hwnd, const char *topic, const nsAString & someData)
{
    nsString sWData(someData);

    LPVOID ipRemoteBuffer = NULL;

    DWORD processId = 0;
    DWORD threadId = ::GetWindowThreadProcessId(hwnd, &processId);
           
    HANDLE hProcess = ::OpenProcess( PROCESS_ALL_ACCESS, FALSE, processId);

    ipRemoteBuffer = ::VirtualAllocEx(
        hProcess,
        NULL,
        strlen(topic),
        MEM_COMMIT,
        PAGE_READWRITE );

    DWORD iWrite;
    WriteProcessMemory(
        hProcess,
        ipRemoteBuffer,
        topic,
        strlen(topic),
        &iWrite
    );

    LPVOID ipRemoteBuffer2 = NULL;
    ipRemoteBuffer2 = ::VirtualAllocEx(
        hProcess,
        NULL,
        2*someData.Length(),
        MEM_COMMIT,
        PAGE_READWRITE );

    //DWORD iWrite;
    WriteProcessMemory(
        hProcess,
        ipRemoteBuffer2,
        sWData.get(),
        2*someData.Length(),
        &iWrite
    );

    ::PostMessage(hwnd, WM_CE_NOTIFY, (WPARAM)ipRemoteBuffer, (LPARAM)ipRemoteBuffer2);

    ::CloseHandle( hProcess );

    return;
}

 

參考:

時隔已久,當時也參考了好幾個網上的文檔,由於時間倉促沒有記下,下回找到後一定補齊。

 

 

相關BLOG:

http://blog.csdn.net/flywithdream/archive/2007/06/14/1652491.aspx

WM_COPYDATA 實現進程間數據共享

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章