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

郑昀记录 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)。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值