http://dsdm.bokee.com/5265446.html
风里有梦的Blog
在 C# 中调用 C++(转)
在 C# 中调用 C++
在最近要做的一个项目中,其核心算法是用C++写的,而界面部分准备用C#实现是较好的选择,这就需要在C#的框架中调用C++部分。
在C#中调用C++组建大致有两种方法,一种是将它封装成COM,另一种是封装成动态链接库(DLL)。文章《如何在C#中加载自己编写的动态链接库(DLL)》对这两者做了大致比较,详细讲解了后一种方法,在MSDN的中文版中也有对这个问题更专门的讲解:在 C# 中通过 P/Invoke 调用Win32 DLL。
C+ +和C#中所用的数据类型不同,机制也有所区别,在传递参数时需要特别注意。在C#和C++中还可以通过COM组建的方式来共享数据。比如我要做的这个项 目中,C#和C++部分都需要访问IE控件中HTML页面的DOM模型,同时还有一些信息交互,比如在用C#实现的GUI中选择了网页的某个元素,需要告 诉用C++实现的核心算法,这时需要在C++做的DLL中导出一个函数 :
extern "C" __declspec(dllexport) void tell(IUnknown* element){
CComQIPtr<IHTMLElement> ptr(element);
};
在C#中声明这个外部函数:
[DllImport("mydll"), Entry("tell")] public static extern void tell(object element);
调用时这样:
tell( Marshal.GetIUnknownForObject( element.DomDocument )
此时传递的是DOM对象,并用C#中的 Marshal 类进行封装。
【作者: 风里有梦(AHang)】【访问统计: <script src="http://counter.blogchina.com/PageServlet?pageid=5265446&blogid=1791537" language="JavaScript" type="text/javascript"></script> 47】【2006年06月20日 星期二 00:07】【 加入博采】【打印】
Trackback
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=5265446
发布人: |
邮箱: |
主 页: |
发布人: | 邮箱: | ||
主 页: | |||
验证码: | |||
评论内容: | |||