關於C 中實現兩個應用程式訊息通訊的問題

2021-04-06 20:42:57 字數 1610 閱讀 2582

注意這裡傳送訊息的函式:public static void sendmessage(string destprocessname, int msgid, string strmsg)

只能傳送乙個msgid和乙個strmsg, 接收方只接收了strmsg,我的專案中已經夠用了,你如果需要讀msgid,還需要改一下。客戶端**請參考csdn上的原文自己寫吧。

/**/

/*程序之間通訊的幾種方法: 

在windows程式中,各個程序之間常常需要交換資料,進行資料通訊。常用的方法有  

(1)使用記憶體對映檔案  

(2)通過共享記憶體dll共享記憶體  

(3)使用sendmessage向另一程序傳送wm_copydata訊息  

比起前兩種的複雜實現來,wm_copydata訊息無疑是一種經濟實惠的一種方法.  

wm_copydata訊息的主要目的是允許在程序間傳遞唯讀資料。windows在通過wm_copydata訊息傳遞期間,不提供繼承同步方式。

sdk文件推薦使用者使用sendmessage函式,接受方在資料拷貝完成前不返回,這樣傳送方就不可能刪除和修改資料:  

這個函式的原型及其要用到的結構如下:  

sendmessage(hwnd, wm_copydata, wparam, lparam);    

其中:wm_copydata對應的十六進製制數為0x004a  

wparam設定為包含資料的視窗的控制代碼。

lparam指向乙個copydatastruct的結構:  

typedef  struct  tagcopydatastruct

copydatastruct;  

該結構用來定義使用者資料。  

具體過程如下:  

首先,在傳送方,用findwindow找到接受方的控制代碼,然後向接受方傳送wm_copydata訊息。

接受方在defwndproc事件中處理這條訊息。由於中文編碼是兩個位元組, 所以傳遞中文時候位元組長度要搞清楚。  

protected  override  void  defwndproc(ref  system.windows.forms.message  m)  

base.defwndproc(ref  m);  

}  */

using

system;

using

system.runtime.interopservices;  

using

system.diagnostics;

namespace

speeding.util

/**/

//////

本類封裝了一些程序間通訊的細節

///public

class

winmessageutil}}

/**/

//////

接收訊息,得到訊息字串

//////

system.windows.forms.message m

///接收到的訊息字串

public

static

string

receivemessage(

refsystem.windows.forms.message  m)}}

electron呼叫C 應用程式實現串列埠通訊

最近轉入零售行業開發了一系列產品,包含便利店收銀軟體 會員系統 鏈系統。為了追趕潮流,收銀軟體使用了electron平台開發,介面效果 開發效率確實不錯 但是涉及到串列埠通訊時遇到了麻煩,electron不能直接使用node.js的串列埠模組。網上有一些文章推薦編譯electron原始碼來實現串列埠...

關於C 中vector的兩個小tips分享

前言 本來這篇文章標題我想起成 關於 vector 的兩個小坑 後來想想,其實也不算是坑,還是自己對原理性的東西理解的沒做那麼透徹。工作中遇到的很多問題,後來歸根到底都是基礎不牢靠。vector 擴容 這個問題很經典了,但還是不小心踩到。有乙個需求是要對目標元素進行複製,而目標元素集合是儲存在 ve...

VB分布式應用程式開發隨記 繼承的兩個方面

繼承是一種以實體間的 是 關係為基礎的物件導向的概念。到目前為止,我已使用術語 實現繼承 來代替使用更通用的術語 繼承 這是因為使用子類擴充套件超類是唯一一種平衡 是 關係的方法。當類實現介面時,它還將利用 是 關係。例如,如果類 cbeagle 實現介面 idog,那麼說獵犬 是 小狗是正確的。您...