读书人

Win32的程序该怎么与.net程序通信啊

发布时间: 2012-01-22 22:38:43 作者: rapoo

Win32的程序该如何与.net程序通信啊???急~
有一个VC.NET的程序A,虽然.NET,但是是MFC的,它能实时地取得摄像头的视频帧。

另有C#的程序B,实现移动侦测算法以及将视频帧写成avi的算法。

该如何把A得到的BMP视频帧实时地、有效地传递给B呢?同时还要传递一些标志FLAG

[解决办法]
socket
命名管道
[解决办法]
进程间通讯,有很多种方法,共享内存,邮件槽,命名管道都可以
[解决办法]
对于C#了解的不多,如果支持命名管道的话,就好办了,结构化的数据是肯定能传递的,只使调用WriteFile向管道句柄里写数据就可以,VC下的命名管道几个基本函数:
CreateNamedPipe
ConnectNamedPipe
DisconnectNamedPipe
FlushFileBuffers
PeekNamedPipe
[解决办法]
猛学习一下
[解决办法]
看看下面这个会不会对你有用:
.Net中封装Windows 消息实现进程间通讯
http://www.cnblogs.com/PeanutLee/archive/2006/11/03/548538.html
[解决办法]
我介绍另外一种方式:将你的c#导出为一个com组件接口,这样无论什么语言都可以直接使用了。导出方法详细解答:
15.使用C#写的组件(创建类型为Class Library):
1> C#必须使用interface,且实现类中需要将构造函数显示的声明为public:
public interface ISUPCommand
{
Boolean SendCommand(string sCom);
}
public class SUPCommand : ISUPCommand
{
public SUPCommand()
{
}

public Boolean SendCommand(string sCom)
{
return true;

}
2> 需要将AssemblyInfo.cs中的ComVisible改为true:
[assembly: ComVisible(true)]
3> 为了使其它C++程序可以使用编译好的DLL,需要将该程序集标记为带签名的强类型(强类型可以全局使用,非强类型只能在同一目录下被使用).使用以下命令产生一个签名文件,并将它加入到C#工程里面:
sn -k ATLCOMTest.snk

然后在工程属性页中指定该签名文件:



重新编译之.

4> 使用以下命令生成并注册生成的DLL程序集文件:
regasm /tlb:ATLCOMTest.tlb ATLCOMTest.dll
5> 注册好类型库后,可以在oleview看到,实际上C#组件是通过.NET提供的一个代理DLL来向外公布接口的,因为C#是托管的,而COM组件是非托管的.为了能让大家都可以使用该C#组件,还需要用以下命令将该程序集安装到全局程序集里去:
gacutil /i ATLCOMTest.dll
OK,你现在可以在C:\WINNT\assembly目录下看到你的程序集了.这个过程我理解只是将此DLL的信息注册到了了全局程序集中,真正的DLL还是位于你当前的目录下.
6> 到此为止,这个C#的DLL现在就”变成”了一个COM了.C#的interface对应的被映射成了COM的接口,数据类型也被一一映射了.具体对应关系,请查看MSDN。

如果还搞不定,请发mail至kempniu@gmail.com,大家一起探讨

[解决办法]
上面的方案如果对你有帮助,别忘记给俺加分哟。本人很少上csdn,最近上来看到上面有很多问题没什么人给出好的方案,所以我就来瞎说了。但我还是想捞点分,嘿嘿

读书人网 >VC/MFC

热点推荐