**:
共享記憶體方式是通過記憶體來傳遞資料,必須在記憶體中申請一定的空間。
可以呼叫globalalloc()或者virtualallocex()來實現記憶體空間分配,使用記憶體讀寫函式;readprocessmemory()和writeprocessmemory()來讀寫程序的記憶體。
要使接收程式獲得傳送程式的記憶體位址,可以通過傳送訊息方法來實現,即通過訊息把記憶體位址從傳送程式傳遞到接收程式。
(1)資料傳送
步驟:1. 首先要使用傳送訊息的方法來傳遞指標,就需要定義乙個使用者訊息,以便傳遞指標。
通過registerwindowmessage()函式來註冊,定義乙個新的視窗訊息,是保證整個系統中是唯一的。可以用來傳送或發布訊息時,訊息值。
例如:定義乙個名字為mem_data的訊息型別(windows會自動將訊息名稱對映成乙個可用的訊息號)
const uint wm_nmemmsg=registerwindowmessage("mem_data");
尋找接收資料的程式recieve的視窗指標pwnd和程序控制代碼hprocess,用virtualallocex()函式在這個程序中申請虛擬記憶體空間。然後通過writeprocessmemory()把字串m_strsend存放入虛擬記憶體中,並且通過訊息wm_nmemmsg把所申請的記憶體空間起始位址傳送給資料接收程式。最後,當資料接收程式接收到資料後,用virtualfreeex()釋放所申請的虛擬記憶體。
資料傳送函式具體**如下:
(2)資料接收
首先需要定義乙個使用者訊息,如下**所示:
const uint wm_nmemmsg=registerwindowmessage("mem_data");
然後在標頭檔案中新增訊息對映函式定義:
afx_msg void onregmemmsg(wparam wparam,lparam lparam);
接著需要定義wm_nmemmsg訊息對映,它在訊息對映表中的表示方法如下:
begin_message_map(cdatarecvdlg, cdialog)
on_registered_message(wm_nmemmsg,onregmemmsg)
end_message_map()
最後在原始檔中新增實現訊息對映函式,具體**如下:
void main
Unix環境程序間通訊(二)
struct shmid ds struct ipc perm 4.4 include include 開啟建立儲存段 int shmget key t key,size t size,int shm 返回 失敗 1,成功返回非負的共享儲存段 id 第乙個引數 key是共享儲存關鍵字。它有特殊值 i...
windows程序間通訊
摘 要 隨著人們對應用程式的要求越來越高,單程序應用在許多場合已不能滿足人們的要求。編寫多程序 多執行緒程式成為現代程式設計的乙個重要特點,在多程序程式設計中,程序間的通訊是不可避免的。microsoft win32 api 提供了多種程序間通訊的方法,全面地闡述了這些方法的特點,並加以比較和分析,...
Windows下程序間通訊
1 程序與程序通訊 2 程序通訊方法 2.1 檔案對映 win32 api中共享記憶體 shared memory 實際就是檔案對映的一種特殊情況。程序在建立檔案對映物件時用0xffffffff來代替檔案控制代碼 handle 就表示了對應的檔案對映物件是從作業系統頁面檔案訪問記憶體,其它程序開啟該...