MFC编写界面 如何 与C#编写的界面 通讯(交互) 我现在编辑了一个MFC应用程序!读表等一些数据操作! 另一个人 用C#编写了另一个界面工具! 现在又方法让2个界面程序进行通讯交互么?比如:mfc界面 点击一个按钮 查询到C#编写的 界面中,并在其显示相应的数据!有方法么???求教 有代码 更佳!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最简单,就是用共享内存。还有管道,剪贴板,socket等等。 我现在 是这样做的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){////codereturn TRUE;}但是 没反应呀!!不成功呀 进程间通信的方法: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可以在不同主机间传送数据。 我要做的 很简单!比如MFC界面 管理的是学校教室! C#里面管理的是学生当看见教室里有学生! 我点击MFC中的学生ID 这时 C#界面 就显示出学生的详细信息!就想干这样的事!!! 网上都有例子的,实在不会用socket通信,大把代码 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(); } }} 你建个对话框工程叫做Clipboard,然后在对话框上拖两个Edit,ID分别为IDC_EDIT_SEND,IDC_EDIT_RECV,再拖两个按钮,一个响应OnBtnSend,另一个响应OnBtnRecv,然后把上面的代码加进去,编译好了运行两个exe实例,一个发,另外一个点接收就能收到了;只是告诉你两进程通信的一种方法,怎么用到你的程序中,你自己琢磨吧 richedit设置字体与颜色问题 怎样制作桌面活动动画 请问:我在发布用ADO方式连接到SQL SERVER数据库程序时,在98安装出现问题 activex添加的属性在ie中为何传递不成功 C++初学者若干问题!!! vc中如何读取jpg、gif等格式的图片? vc7.0中为什么消息总是接收不到?(在线等待) 怎么把一个WCHAR放到Cstring里去 ★-如何换行,高手请进? 选那个钩子呢? 烦人的户口问题! CString 和 char* 之间的问题 vs2010中
我现在 是这样做的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;
}但是 没反应呀!!不成功呀
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可以在不同主机间传送数据。
比如MFC界面 管理的是学校教室! C#里面管理的是学生当看见教室里有学生! 我点击MFC中的学生ID 这时 C#界面 就显示出学生的详细信息!就想干这样的事!!!
{
// 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();
}
}
}