[C#]C++调用dotNet组件的步骤

news/2024/7/1 18:23:25

郑昀记录 200409

C#写的组件,一般C++无法调用。除非在C#中这么做:

第一步,修改HTMLParser工程属性:

Build信息页中“Register for COM interop”设置为True

 

第二步,在class特意声明:

namespace HTMLParser

{

    [Guid(" 1F 6EBDEF-1111-2222 -86F 2-0CEF0ED302E0")]

    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]

    public interface _ParseHTML

    {

        [DispId(1)]

        String GetVersion();

 

        [DispId(2)]

        String GetLastError();

 

        [DispId(3)]

        String ParseFile(String strRegularExpression);

    }

 

[Guid("C 11113C 6 -23F 3-4db5-2222-BF5BD 95A 5C 81")]

    [ClassInterface(ClassInterfaceType.None)]

    [ProgId("HTMLParser.ParseHTML")]

    public class ParseHTML : _ParseHTML

    {。。。

 

这样,就能够像调用一个普普通通的COM组件一样了。

当然在Visual C++调用该组件时也需要第三个技巧:

///

///

/// 对于这种特殊的C#写的COM组件,必须以特殊方式调用

HTMLParser::_ParseHTML *com_ptr_Parser;

HTMLParser::_ParseHTMLPtr pPaser(__uuidof(HTMLParser::ParseHTML));

com_ptr_Parser = pPaser;

_bstr_t bstrXMLFilePath =

    com_ptr_Parser->ParseFile(

        _bstr_t(strRegularExpression.c_str()));

 

更多信息参见《Creating a CCW for COM enabled non .NET applications

Nick Parker http://www.codeproject.com/dotnet/nettocom.asp)。




郑昀记录 200409

C#写的组件,一般C++无法调用。除非在C#中这么做:

第一步,修改HTMLParser工程属性:

Build信息页中“Register for COM interop”设置为True

 

第二步,在class特意声明:

namespace HTMLParser

{

    [Guid(" 1F 6EBDEF-1111-2222 -86F 2-0CEF0ED302E0")]

    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]

    public interface _ParseHTML

    {

        [DispId(1)]

        String GetVersion();

 

        [DispId(2)]

        String GetLastError();

 

        [DispId(3)]

        String ParseFile(String strRegularExpression);

    }

 

[Guid("C 11113C 6 -23F 3-4db5-2222-BF5BD 95A 5C 81")]

    [ClassInterface(ClassInterfaceType.None)]

    [ProgId("HTMLParser.ParseHTML")]

    public class ParseHTML : _ParseHTML

    {。。。

 

这样,就能够像调用一个普普通通的COM组件一样了。

当然在Visual C++调用该组件时也需要第三个技巧:

///

///

/// 对于这种特殊的C#写的COM组件,必须以特殊方式调用

HTMLParser::_ParseHTML *com_ptr_Parser;

HTMLParser::_ParseHTMLPtr pPaser(__uuidof(HTMLParser::ParseHTML));

com_ptr_Parser = pPaser;

_bstr_t bstrXMLFilePath =

    com_ptr_Parser->ParseFile(

        _bstr_t(strRegularExpression.c_str()));

 

更多信息参见《Creating a CCW for COM enabled non .NET applications

Nick Parker http://www.codeproject.com/dotnet/nettocom.asp)。




郑昀记录 200409

C#写的组件,一般C++无法调用。除非在C#中这么做:

第一步,修改HTMLParser工程属性:

Build信息页中“Register for COM interop”设置为True

 

第二步,在class特意声明:

namespace HTMLParser

{

    [Guid(" 1F 6EBDEF-1111-2222 -86F 2-0CEF0ED302E0")]

    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]

    public interface _ParseHTML

    {

        [DispId(1)]

        String GetVersion();

 

        [DispId(2)]

        String GetLastError();

 

        [DispId(3)]

        String ParseFile(String strRegularExpression);

    }

 

[Guid("C 11113C 6 -23F 3-4db5-2222-BF5BD 95A 5C 81")]

    [ClassInterface(ClassInterfaceType.None)]

    [ProgId("HTMLParser.ParseHTML")]

    public class ParseHTML : _ParseHTML

    {。。。

 

这样,就能够像调用一个普普通通的COM组件一样了。

当然在Visual C++调用该组件时也需要第三个技巧:

///

///

/// 对于这种特殊的C#写的COM组件,必须以特殊方式调用

HTMLParser::_ParseHTML *com_ptr_Parser;

HTMLParser::_ParseHTMLPtr pPaser(__uuidof(HTMLParser::ParseHTML));

com_ptr_Parser = pPaser;

_bstr_t bstrXMLFilePath =

    com_ptr_Parser->ParseFile(

        _bstr_t(strRegularExpression.c_str()));

 

更多信息参见《Creating a CCW for COM enabled non .NET applications

Nick Parker http://www.codeproject.com/dotnet/nettocom.asp)。





http://www.niftyadmin.cn/n/3648871.html

相关文章

com.vix.cron_如何在Ubuntu 18.04上使用Cron自动化任务

com.vix.cronA previous version of this tutorial was written by Shaun Lewis. 本教程的先前版本由Shaun Lewis编写。 介绍 (Introduction) Cron is a time-based job scheduling daemon found in Unix-like operating systems, including Linux distributions. Cron runs i…

自定义TextView——解决ViewGroup不调用OnDraw方法

首先绘制TextView继承于View:直接贴代码 public class TextView extends LinearLayout{private String mText;private int mTextSize 18;private int mTextColor Color.BLACK;private Paint mPaint;//文字的画笔// 构造函数会在代码里面new的时候调用// TextView tv new Te…

Android Material Design-Maintaining Compatibility(保持兼容性)

一些materialdesign中的功能像material主题和自定义activity的过渡只能在Android 5.0(API级别21)或以上的系统版本中才能使用。但是你可以设计你的app去使用那些功能,无论在支持materialdesign的设备上亦或是早期的Android版本上。 定义可选的样式 你可以配置你的ap…

[Regex]Greta不支持“Named Groups”特性

微软研究院出品的Greta(http://research.microsoft.com/projects/greta/)是一款非常优秀的正则表达式模板类库,GRETA的匹配速度比boost(http://www.boost.org)正则表达式库大约快7倍,比ATL7的CATLRegExp快10倍。你可以通过http://…

盖茨比乔布斯_在盖茨比中使用React Hooks

盖茨比乔布斯JavaScript treats functions as first-class citizens. And we can see this in React now more than ever with the introduction of Hooks in version 16.8. They allow for state manipulation and side-effects on functional components. JavaScript将函数视…

android热修复——自己做个热修复

类的加载机制 需要注意的地方 1.每次生成之后一定要测试;2.尽量的不要分包,不要分多个dex3.混淆的时候,设计到NDK AndFix.java 不要混淆4.生成包之后一般会加固什么的,这个时候生成的差分包,一定要在之前去生成。5.…

Android系统权限配置详解

Android 权限控制代码分析 前在文章介绍过android系统管理层次:http://blog.csdn.net/andyhuabing/article/details/7030212 ,这里就核心代码分析一下 android系统充分利用了linux的用户权限管理方法,所以如果需要移植到其它系统&#xff0c…

自己动手搭建数据库框架

首先IDaoSupport接口&#xff0c;有查询&#xff0c;插入单条数据&#xff0c;批量插入&#xff0c;删除&#xff0c;更新 public interface IDaoSupport<T> {void init(SQLiteDatabase sqLiteDatabase, Class<T> clazz);// 插入数据public long insert(T t);// 批…