zoukankan      html  css  js  c++  java
  • 在 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中导出一个函数 :

    1. extern "C"  __declspec(dllexport) void tell(IUnknown* element){  
    2.     CComQIPtr<IHTMLElement> ptr(element);  
    3. };  


     在C#中声明这个外部函数:

    [DllImport("mydll"), Entry("tell")] public static extern void tell(object element);

    调用时这样:
    tell( Marshal.GetIUnknownForObject( element.DomDocument )

    此时传递的是DOM对象,并用C#中的 Marshal 类进行封装。

  • 相关阅读:
    关于php中trim、ltrim和rtrim
    文件读取
    字典
    列表
    数据类型作业
    常用的数据类型
    字符串
    编码
    MVC 入门
    JavaScript 类型浅解
  • 原文地址:https://www.cnblogs.com/lizi/p/2362634.html
Copyright © 2011-2022 走看看