我想问一下,在同一台机器上,运行的两个不同的应用程序,怎么样来进行通讯。100分 用WM_COPYDATA消息,内存映像文件,全局原子,剪贴板都可以,没必要用winsocket 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to debussy(debussy) MailSlotPipe什么意思? 用控件吗? 还有一点忘记说了,这两个不同的应用程序有可能一个是用DELPHI 开发的,而另一个是用VB开发的 MailSlot Pipe 是Windows API中的东西,对应的API函数为:CreateNamedPipe CreatePipe CreateMailslot你自己看看API函数的帮助吧。在我的程序里,用的是共享内存的方法,对应的API函数为:CreateFileMapping MapViewOfFile UnmapViewOfFile 我开发过一个五子棋游戏程序,它的目的是在网上供处于两地的两个人对弈的,但为了调试,我可以在同一机器上,将它启动两次,运行两个版本,使两个相同程序的不同版本在同一机器上运行,并进行通信,相互对弈。每启动一次屏幕上就有一个棋盘,2次启动就产生2个棋盘。我让一个放在屏幕左边,一个放在屏幕右边,由我一个人在2个棋盘上轮流下子。每下一个子都会2个棋盘上都显示出来。这种编程和一般的通信编程没有什么差别。我用的就是winsocket编程。要注意一点就是要预先在Win98中按装PWS程序。不知您想进一步了解什么? 同意 xbohzti(无意识), 可以是自定义的消息, 然后有自己的消息处理函数. to jishiping(JSP 季世平) 能给一个例子吗?谢谢 由于我用的是C++Builder,这儿我只能给出用C语言写出的例子代码:int Size;UINT *Data;BOOL IsNew;HANDLE hMem;//建立共享内存,并将主窗口的句柄放入共享内存,供另外一个程序调用Size = 4096; //共享内存的大小hMem = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, 4096, "共享名称");if (hMem != NULL) IsNew = GetLastError() == 0; Data = (UINT*)MapViewOfFile(hMem, FILE_MAP_WRITE, 0, 0, Size); if (Data != NULL) { //这儿Handle是主窗口的句柄,将主窗口的句柄放入共享内存 if (IsNew) { Data[0] = (UINT)Handle; Data[1] = 0; } else Data[1] = (UINT)Handle; }}else Data = NULL;当程序结束时,加上下面的代码,释放共享内存UnmapViewOfFile(Data); CloseHandle(hMem);当需要和另一个程序通讯时,先从共享内存取得另一个程序的窗口句柄,然后向另一个程序的窗口发送自定义的消息。通讯时如果需要数据的话,可以利用共享内存。比如:第一个程序发消息给第二个程序时,数据存放在Data+2开始的内存块,第二个程序发消息给第一个程序时,数据存放在Data+512开始的内存块。HWND hWnd; BYTE* pMem;if (IsNew) { hWnd = (HWND)Data[1]; pMem = (BYTE*)(Data+2);}else { hWnd = (HWND)Data[0]; pMem = (BYTE*)(Data+512);}这儿 hWnd 是另一个程序的窗口句柄。将通讯数据写入到pMem中,然后向另一个程序发消息SendMessage(hWnd, WM_APP+1, 0, 0);至于如何处理自定义的消息,就不用我在这儿说了吧。 如何在桌面画一个圆圈,自左向右移动? 这个exit语句的问题在哪里? DBGridEh怎样设置属性才能下拉Grid? 关于程序最小化的郁闷问题(估计没人遇到过), 问题一句话说不完, 进来看看吧...谢谢 相当有难度的问题,期待能人解决 DTS数据包的使用 怎样由TBitmap的变量获得一个windows结构BITMAP的变量? 高手们来帮忙,关于Office文档的问题 在ACCESS 中 数据类型用 是/否 如何默认为打勾 请问各位高手:控件下载后怎么用? 老大,infopower2000的密码是多少阿? 请朋友们给一份有关于DELPHI中操作注册表的资料
Pipe什么意思? 用控件吗?
CreateNamedPipe CreatePipe CreateMailslot
你自己看看API函数的帮助吧。在我的程序里,用的是共享内存的方法,
对应的API函数为:
CreateFileMapping MapViewOfFile UnmapViewOfFile
能给一个例子吗?谢谢
UINT *Data;
BOOL IsNew;
HANDLE hMem;//建立共享内存,并将主窗口的句柄放入共享内存,供另外一个程序调用
Size = 4096; //共享内存的大小
hMem = CreateFileMapping((HANDLE)0xFFFFFFFF,
NULL, PAGE_READWRITE, 0, 4096, "共享名称");
if (hMem != NULL)
IsNew = GetLastError() == 0;
Data = (UINT*)MapViewOfFile(hMem, FILE_MAP_WRITE,
0, 0, Size);
if (Data != NULL) {
//这儿Handle是主窗口的句柄,将主窗口的句柄放入共享内存
if (IsNew) {
Data[0] = (UINT)Handle; Data[1] = 0;
}
else
Data[1] = (UINT)Handle;
}
}
else
Data = NULL;当程序结束时,加上下面的代码,释放共享内存
UnmapViewOfFile(Data); CloseHandle(hMem);当需要和另一个程序通讯时,先从共享内存取得另一个程序的窗口句柄,
然后向另一个程序的窗口发送自定义的消息。通讯时如果需要数据的话,
可以利用共享内存。比如:第一个程序发消息给第二个程序时,数据存
放在Data+2开始的内存块,第二个程序发消息给第一个程序时,数据存
放在Data+512开始的内存块。
HWND hWnd; BYTE* pMem;
if (IsNew) {
hWnd = (HWND)Data[1];
pMem = (BYTE*)(Data+2);
}
else {
hWnd = (HWND)Data[0];
pMem = (BYTE*)(Data+512);
}
这儿 hWnd 是另一个程序的窗口句柄。
将通讯数据写入到pMem中,然后向另一个程序发消息
SendMessage(hWnd, WM_APP+1, 0, 0);
至于如何处理自定义的消息,就不用我在这儿说了吧。