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

王朝c#·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

郑昀记录 200409

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

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

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

第二步,在class特意声明:

namespace HTMLParser

{

[Guid("1F6EBDEF-1111-2222-86F2-0CEF0ED302E0")]

[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]

public interface _ParseHTML

{

[DispId(1)]

String GetVersion();

[DispId(2)]

String GetLastError();

[DispId(3)]

String ParseFile(String strRegularExpression);

}

[Guid("C11113C6-23F3-4db5-2222-BF5BD95A5C81")]

[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)。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航