有四種方法
1.剪貼簿
a.建立個clipboard的對話方塊應用程式,加兩editbox和兩個button傳送接收。
b.具體**:
傳送端**:
if(openclipboard())
接收端**:
if(openclipboard()) }
2.匿名管道:只能在父子程序之間進行通訊
a.先建乙個parent的單文件應用程式,增加「建立管道」「讀取資料」「寫入資料」三個選單
b.增加成員變數handle型別的hread,hwrite,初始化變數,並在析構函式中釋放控制代碼
c.響應選單**:
void cparentview::onpipecreate()
選單「建立管道」**
startupinfo sui;
process_information pi;
zeromemory(&sui,sizeof(startupinfo));
將資料清0!
sui.cb=sizeof(startupinfo);
sui.dwflags=startf_usestdhandles;
sui.hstdinput=hread;
sui.hstdoutput=hwrite;
sui.hstderror=getstdhandle(std_error_handle);
if(!createprocess("..\\child\\debug\\child.exe",null,null,null,
true,0,null,null,&sui,&pi))
建立子程序
else }
選單「讀取資料」**
void cparentview::onpiperead()
messagebox(buf); }
void cparentview::onpipewrite()
選單「寫入資料」** }
d.再建乙個child的單文件,在view中增加兩個成員hread和hwrite.在oninitialupdate()中得到控制代碼的值。
void cchildview::oninitialupdate()
e.加選單「讀取資料」「寫入資料」其**如下:
void cchildview::onpiperead()
messagebox(buf); }
void cchildview::onpipewrite() }
3.命名管道:還可以跨網路通訊,伺服器只能在win2000和nt下執行!而客戶端可以在95下執行。關鍵函式createnamedpipe
a.先建乙個namedpipesrv單文件應用程式,加選單「建立管道」「讀取資料」「寫入資料」
b.在view中增加handle變數hpipe,注意在析構函式中釋放它!
c.響應選單,建立命名管道
void cnamedpipesrvview::onpipecreate()
handle hevent;
hevent=createevent(null,true,false,null);
if(!hevent)
ovlap.hevent=hevent;
if(!connectnamedpipe(hpipe,&ovlap)) }
if(wait_failed==waitforsingleobject(hevent,infinite))
closehandle(hevent); }
void cnamedpipesrvview::onpiperead()
messagebox(buf); }
void cnamedpipesrvview::onpipewrite() }
d.再建乙個namedpipeclt單文件工程,加選單「連線管道」「讀取資料」「寫入資料」,當然別忘記成員變數hpipe的定義和初始化
e.響應選單**
void cnamedpipecltview::onpipeconnect()
連線管道
hpipe=createfile("\\\\.\\pipe\\mypipe",generic_read | generic_write,
0,null,open_existing,file_attribute_normal,null);
if(invalid_handle_value==hpipe) }
void cnamedpipecltview::onpiperead()
讀取資料
messagebox(buf); }
void cnamedpipecltview::onpipewrite()
寫入資料 }
4.郵槽,使用時應將訊息長度限制在424位元組以下,關鍵函式createmailslot()
a.先建乙個mailslotsrv工程,加選單「接收資料」
b.訊息響應**:
選單「接收資料」的**
void cmailslotsrvview::onmailslotrecv()
char buf[100];
dword dwread;
if(!readfile(hmailslot,buf,100,&dwread,null))
messagebox(buf);
closehandle(hmailslot); }
c.加工程mailslotclt,加選單「傳送資料」
d.加訊息響應,新增**,客戶端也比較簡單。
void cmailslotcltview::onmailslotsend()
選單「傳送資料」的**
char buf="";
dword dwwrite;
if(!writefile(hmailslot,buf,strlen(buf)+1,&dwwrite,null))
closehandle(hmailslot); }
5.以上4種方法各有優缺點:剪貼簿比較簡單。郵槽是基於廣播的,可以一對多傳送。但只能乙個傳送,乙個接收,要想同時傳送接收,須寫兩次**。
命名管道和郵槽可以進行網路通訊。
vc 程序間通訊
一直以來沒有寫過本地程式間的通訊 今天終於有需求了,上網大概看了下,方式還是比較多的,就說說兩種最簡單的吧,當然還有以後用到再說 1 試用自定義消信通訊 這種方式主要是傳遞整形或列舉型資料 可以使用 define wm user x,0x4002 使用wm copydata訊息通訊 介紹下 type...
Linux學習之旅(17) 程序間通訊
程序通訊是指程序之間的資訊交換。由於程序的互斥與同步,需要在程序間交換一定的資訊,所以被稱為程序通訊,但這只是低階的程序通訊。原因在於 1 效率低,每次只能從緩衝區中取得乙個訊息。2 通訊對使用者不透明。在程序之間要傳送大量的資料時,應當利用os提供的高階通訊工具,該工具最主要的特帶你的是 1 使用...
孫鑫VC 第17章程序間的通訊
第17章 程序間的通訊 1.當乙個程序啟動後,作業系統為其分配4gb的私有位址空間。位於同乙個程序中的多個執行緒共享同乙個位址空間,因此執行緒之間的通訊非常簡單 2.四種程序間通訊方式 剪下板,匿名管道,命名管道,郵槽 3.如果某個程式已經開啟了剪貼簿,則其他應用程式將不能修改剪下板,直到前者呼叫了...