我现在编辑了一个MFC应用程序!读表等一些数据操作! 另一个人 用C#编写了另一个界面工具! 现在又方法让2个界面程序进行通讯交互么?比如:mfc界面 点击一个按钮 查询到C#编写的 界面中,并在其显示相应的数据!有方法么???求教 有代码 更佳!!!!!

解决方案 »

  1.   

    最简单,就是用共享内存。还有管道,剪贴板,socket等等。
      

  2.   


    我现在 是这样做的C# code:[DllImport("user32")]
      internal static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, ref COPYDATASTRUCT lParam);[DllImport("User32.dll",EntryPoint="FindWindow")]
    internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName);// 点击按钮时
    IntPtr pFind = new IntPtr(0);
     pFind = Win32.FindWindow(null, "Editor");
     if ( pFind != null )
    {
      // Win32.SendMessage(pFind, Win32.WM_COPYDATA, this.Handle, ref data);
      Win32.PostMessage(pFind, Win32.WM_COPYDATA, this.Handle, pFind);
    }
    // 算是 想找到一个窗口名字为"Editor"的MFC窗口 发一个消息MFC code:中 这个名字为"Editor"的消息相应为ON_WM_COPYDATA()BOOL TEditorSheet::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
    {
    //
    //code
    return TRUE;
    }但是 没反应呀!!不成功呀
      

  3.   

    进程间通信的方法:1、剪贴板Clipboard: 在16位时代常使用的方式,CWnd中提供支持
    2、窗口消息 标准的Windows消息以及专用的WM_COPYDATA消息 SENDMESSAGE()接收端必须有一个窗口
    3、使用共享内存方式(Shared Memory)
    4、动态数据交换(DDE)通过维护全局分配内存使的应用程序间传递
    5、消息管道(Message Pipe)
    6、邮件槽(Mailslots)
    7、Windows套接字(Windows Socket)
    8、Internet通信 它让应用程序从Internet地址上载或下载文件
    9、RPC:远程过程调用,很少使用,因其与UNIX的RPC不兼容。
    10、串行/并行通信(Serial/Parallel Communication)
    11、COM/DCOM通过COM系统的代理存根方式进行进程间数据交换,但只能够表现在对接口 函数的调用时传送数据,通过DCOM可以在不同主机间传送数据。
      

  4.   

    我要做的  很简单!
    比如MFC界面 管理的是学校教室! C#里面管理的是学生当看见教室里有学生! 我点击MFC中的学生ID 这时 C#界面 就显示出学生的详细信息!就想干这样的事!!!
      

  5.   

    网上都有例子的,实在不会用socket通信,大把代码
      

  6.   

    Clipboard的例子void CClipboardDlg::OnBtnSend() 
    {
    // TODO: Add your control notification handler code here
    if(OpenClipboard())
    {
    CString str;
    HANDLE hClip;
    char *pBuf;
    EmptyClipboard();
    GetDlgItemText(IDC_EDIT_SEND,str);
    hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);
    pBuf=(char*)GlobalLock(hClip);
    strcpy(pBuf,str);
    GlobalUnlock(hClip);
    SetClipboardData(CF_TEXT,hClip);
    CloseClipboard();
    }
    }void CClipboardDlg::OnBtnRecv() 
    {
    // TODO: Add your control notification handler code here
    if(OpenClipboard())
    {
    if(IsClipboardFormatAvailable(CF_TEXT))
    {
    HANDLE hClip;
    char *pBuf;
    hClip=GetClipboardData(CF_TEXT);
    pBuf=(char*)GlobalLock(hClip);
    GlobalUnlock(hClip);
    SetDlgItemText(IDC_EDIT_RECV,pBuf);
    CloseClipboard();
    }
    }
    }
      

  7.   

    你建个对话框工程叫做Clipboard,然后在对话框上拖两个Edit,ID分别为IDC_EDIT_SEND,IDC_EDIT_RECV,再拖两个按钮,一个响应OnBtnSend,另一个响应OnBtnRecv,然后把上面的代码加进去,编译好了运行两个exe实例,一个发,另外一个点接收就能收到了;只是告诉你两进程通信的一种方法,怎么用到你的程序中,你自己琢磨吧