有一个VC.NET的程序A,虽然.NET,但是是MFC的,它能实时地取得摄像头的视频帧。另有C#的程序B,实现移动侦测算法以及将视频帧写成avi的算法。该如何把A得到的BMP视频帧实时地、有效地传递给B呢?同时还要传递一些标志FLAG
解决方案 »
- VS2008新建单文档时项目类型
- fatal error lnk 1136:invalid or corrupt file
- 请问VC怎么判断一个字符串是路径还是文件呢?
- DavidHsing 请进来接分
- 两个应用程序同时工作时,一个窗口界面大,另一个窗口界面小,如何实现小的窗口始终在最前显示?类似于任务管理器
- 怎样创建使用VC中的combo box?
- ...一个很傻的问题~
- windows 2000里的任务管理器中的image name时如何获得的?
- ISAPI中如何传递中文参数? 急,急,急!
- 如何能够实现只对一个控件更新数据
- 关于WM_CHAR和MessageBox
- pRecordset->AddNew()之后没有Update()如何将这个新记录删除掉?
#define _DLLCOM_ extern "C" _declspec(dllexport)
#else
#define _DLLCOM_ _declspec(dllexport)
#endif如果这么写的话,.NET里面找不到入口函数,如果只留一句
#define _DLLCOM_ extern "C" _declspec(dllexport)
的话,WIN32下又找不到了。崩溃啊~CreateFileMapping在.NET下似乎也不灵那GlobalAlloc呢?在.NET下导入后能否有效使用???
CreateNamedPipe
ConnectNamedPipe
DisconnectNamedPipe
FlushFileBuffers
PeekNamedPipe
.Net中封装Windows 消息实现进程间通讯
http://www.cnblogs.com/PeanutLee/archive/2006/11/03/548538.html
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至[email protected],大家一起探讨