用WM_COPYDATA消息,内存映像文件,全局原子,剪贴板都可以,没必要用winsocket

解决方案 »

  1.   

    to debussy(debussy) MailSlot
    Pipe什么意思? 用控件吗?
      

  2.   

    还有一点忘记说了,这两个不同的应用程序有可能一个是用DELPHI 开发的,而另一个是用VB开发的
      

  3.   

    MailSlot  Pipe 是Windows API中的东西,对应的API函数为:
    CreateNamedPipe  CreatePipe  CreateMailslot
    你自己看看API函数的帮助吧。在我的程序里,用的是共享内存的方法,
    对应的API函数为:
    CreateFileMapping  MapViewOfFile  UnmapViewOfFile
      

  4.   

    我开发过一个五子棋游戏程序,它的目的是在网上供处于两地的两个人对弈的,但为了调试,我可以在同一机器上,将它启动两次,运行两个版本,使两个相同程序的不同版本在同一机器上运行,并进行通信,相互对弈。每启动一次屏幕上就有一个棋盘,2次启动就产生2个棋盘。我让一个放在屏幕左边,一个放在屏幕右边,由我一个人在2个棋盘上轮流下子。每下一个子都会2个棋盘上都显示出来。这种编程和一般的通信编程没有什么差别。我用的就是winsocket编程。要注意一点就是要预先在Win98中按装PWS程序。不知您想进一步了解什么?
      

  5.   

    同意 xbohzti(无意识), 可以是自定义的消息, 然后有自己的消息处理函数.
      

  6.   

    to jishiping(JSP 季世平) 
    能给一个例子吗?谢谢
      

  7.   

    由于我用的是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);
    至于如何处理自定义的消息,就不用我在这儿说了吧。