程式之間通訊

2021-07-08 13:42:32 字數 1255 閱讀 9678

訊息作用:

在程序間共享資料(內部通過建立記憶體對映檔案)

訊息介紹:

需要用到的資料結構/型別:

typedef

struct

tagcopydatastruct copydatastruct, *pcopydatastruct;

結構體引數說明:

dwdata(ulong) 儲存乙個數值, 可以用來作標誌等

lpdata(

void*) 待傳送的資料的起始位址(可以為null)

cbdata(dword) 待傳送的資料的長度

訊息的引數:

hwnd: 接收資料的視窗的控制代碼

wparam: 傳送該資料的視窗控制代碼(null也無所謂)

lparam: copydatastruct型別變數的位址

使用示例:

copydatastruct cds;

char msg = "

女孩不哭";

cds.dwdata = 0

; cds.lpdata =msg;

cds.cbdata = strlen(msg)+1; //

字串請記得把'\0'加上, 不然就錯了, 這裡是ansi字串

sendmessage(findwindow("

nbsg_class

", null), wm_copydata, 0, (lparam)&cds);

接收端對該訊息的一種可能處理:

case

wm_copydata:

說明:傳送的資料可以是任意的, 我上面只是為了用messagebox做測試, 所以傳送的是以'\0'的字串.

如果接收訊息的應用程式處理了該訊息, 它應該返回 true , 否則返回 false.

lpdata 指向的記憶體應該是一段"資料

", 就是說裡面不應該有指向該程式某資料的指標. 因為 sendmessage 在處理 wm_copydata 時, 只是把 lpdata 指向的 cbdata 個位元組複製到共享記憶體中. 當前程序私有的指標就算是被傳送到接收程式, 其也是無法訪問的.

當該訊息正當傳送時, 該程序的其它執行緒不能修改其中的資料.

接收端應用程式應該把這段共享記憶體作為唯讀記憶體來訪問. 請不要嘗試修改其中的內容.

lparam 指向的資料只有在該訊息處理時有效, 訊息返回後無效(共享記憶體已被釋放). 且接收端也不能釋放該記憶體. 如果要在訊息返回後繼續取得資料, 可以把它複製到當前程序的某個位置.

驅動程式和應用程式之間通訊

正文 q 請問有什麼方法實現驅動程式主動和應用程式進行實時通訊,而不用應用程式採用定時查詢的方法?比如驅動有一事件發生需要立即通知應用程式,或驅動程式需要向應用程式讀取一些內容.a 有乙個很容易的方式,在驅動程式和應用程式之間用乙個事件。在應用程式createfile的時候,驅動程式iocreate...

驅動程式與應用程式之間的通訊

驅動程式與應用程式之間的通訊 驅動程式必須與應用程式進行通訊,才能最終達到應用程式控制裝置的目的,不然驅動有qiu用。要通訊就涉及到3個方面 1.應用程式與驅動程式通訊 2.驅動程式與應用程式通訊 3.資料傳輸 下面分別討論 1。應用程式與驅動程式通訊 2。驅動程式與應用程式通訊 2 1 驅動程式在...

EXE之間通訊

而且還有好幾種方法。1 傳送訊息傳遞 2 共享記憶體傳遞 3 使用com程序外伺服器 這篇文章主要說明一下,如何利用傳送訊息使兩個exe完成通訊。其他兩個方法感興趣可以搜尋下,都可以找到相應 傳送端 public partial class mainwindow window structlayou...