转载在 C# 中调用 C++

在 C# 中调用 C++(转)

                                      

在 C# 中调用 C++

davies 发表于 2005-8-5 23:09

在最近要做的一个项目中,其核心算法是用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

<script type="text/javascript"> if(getCookie('userID') == null){ document.write('
发布人:
'); document.write('
'); document.write('
邮箱:
'); document.write('
'); document.write('
主 页:
'); document.write('
'); }else{ document.write(' '); } </script>
发布人: 邮箱:
主 页:
验证码:  
评论内容:
               
<script src="http://dsdm.blogchina.com/extend3.js" type="text/javascript"></script>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值