而且還有好幾種方法。1 傳送訊息傳遞 2 共享記憶體傳遞 3 使用com程序外伺服器 ...
這篇文章主要說明一下,如何利用傳送訊息使兩個exe完成通訊。其他兩個方法感興趣可以搜尋下,都可以找到相應
傳送端:
public partial class mainwindow : window
[structlayout(layoutkind.sequential)]
public struct copydatastruct
public const int wm_copydata = 0x004a;
//通過視窗的標題來查詢視窗的控制代碼
[dllimport("user32.dll", entrypoint = "findwindow")]
public static extern intptr findwindow(string lpclassname, string lpwindowname);
//在dll庫中的傳送訊息函式
[dllimport("user32.dll", entrypoint = "sendmessage")]
private static extern int sendmessage(
intptr hwnd, //目標窗體控制代碼
int msg, //wm_copydata
int wparam, //自定義數值
ref copydatastruct lparam //傳遞訊息的結構體,
);public static void sendmessage(string windowname, string strmsg)
}private void button_click(object sender, routedeventargs e)
}
接收端:
public partial class mainwindow : window
//wm_copydata訊息所要求的資料結構
[structlayout(layoutkind.sequential)]
public struct copydatastruct
private const int wm_copydata = 0x004a;
//訊息迴圈捕捉資訊(winform裡是過載wndproc)
protected override void onsourceinitialized(eventargs e)
}private intptr wndproc(intptr hwnd, int msg, intptr wparam, intptr lparam, ref bool handled)
return hwnd;
}}
dll與exe之間的互動
外掛程式一般是以dll的形式存在,而宿主則以exe的形式存在,他們之間必然要互動。通常,互動方式可以是com,一種微軟定義的複雜介面方式,不過支援的人挺多的,但是不利於跨平台使用,而且開發太複雜了。另一方式就是使用訊息系統,互動之間傳遞訊息,還可以實現互動,就是處理起來用非同步方式,稍微有點不自然,...
OBJ LIB DLL與EXE之間的關係
obj是中間 檔案 lib是靜態庫檔案 dll是動態庫檔案 exe是可執行檔案。對於靜態庫檔案,鏈結的時候把其中需要的東西抽取出來嵌入到exe中,exe較大。對於動態庫檔案,exe執行的時候依賴於dll提供的功能,沒有dll則exe無法執行,exe較小。乙個c或cpp檔案被編譯後既是乙個obj,當所...
程式之間通訊
訊息作用 在程序間共享資料 內部通過建立記憶體對映檔案 訊息介紹 需要用到的資料結構 型別 typedef struct tagcopydatastruct copydatastruct,pcopydatastruct 結構體引數說明 dwdata ulong 儲存乙個數值,可以用來作標誌等 lpd...