在vb中可通过"引用"来加入要使用的COM组件,在vc++中则通过"#import"语句来加入COM组件。使用"#import",vc++就会自动生成COM组件中接口的所有包装类,而且封装对COM异常的处理,使我们可以采用强类型的方式进行调用。当然,"#import"不是必需的,比如我们通过IDispatch或IDispatchEx接口访问COM组件时。
#import语法如下:
#import "filename" [attributes] filename可以是包含类型库的文件,如.olb、.tlb、.dll文件 filename也可以是类型库的guid,或COM组件Id
如:
//导入mshtml组件 #pragma warning(disable:4192) //避免大量的编译警告 #import "mshtml.tlb" rename("TranslateAccelerator","TranslateAccelerator_HTML") //导入msxml组件 #import "progid:MSXML2.DomDocument" //导入adodb组件 #import "libid:00000205-0000-0010-8000-00aa006d2ea4" / rename("EOF", "EndOfFile")/ rename("Error","AdoError")
为pimshell开发组件时,有以下几个建议:
- 尽量通过#import导入组件,而不是使用Windows SDK提供的接口。如mshtml组件中的IHTMLDocument2和msxml组件中的IXMLDOMDocument接口,在Windows SDK中均有提供。前面我们说过使用"#import",vc++就会自动生成COM组件中接口的所有包装类,而且封装对COM异常的处理。
- 尽量使用命名空间。这样就可避免与Windows SDK提供的接口相冲突,也可以充分利用vc++自动感知的好处。
- 合理的使用#pragma warning,减少大量的编译警告,也会加快项目的编译。