Windows環境程序間通訊(二) 共享記憶體方式

2021-06-06 00:08:03 字數 1217 閱讀 1163

**:

共享記憶體方式是通過記憶體來傳遞資料,必須在記憶體中申請一定的空間。

可以呼叫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 就表示了對應的檔案對映物件是從作業系統頁面檔案訪問記憶體,其它程序開啟該...