已用于合并类型库中的信息。该类型库的内容转换为C++类,主要描述COM接口。
#import "filename" [attributes]
#import
例如:
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")【这是ADO访问数据库方式需要用的】
下面对上述理论参数进行说明:
filename---指定要导入的类型库。内容可以是:
1.包含一个类型库的文件的名称,如.olb、.tlb或.dll文件。如上面例子中的msado15.dll。
2.类型库中的空间的progid。
注意:当使用在64 bits操作系统的交叉编译器编译的时候,该编译器可以只读取32 bits注册表配置。建议使用本地64 bits编译器编译,注册64 bits类型共享库。
3.类型库的库ID。
例如:#import "libid:12341234-1234-1234-1234-123412341234" version("4.0") lcid("9")
如果不指定版本或lcid,适用于progid的规则也是用与libid。
4.可执行(.exe)文件。
5.包含类型库资源(例如.ocx)的库(.dll)文件。
6.保留类型库的符合文件。
7.可由“LoadTypeLib”API理解的其他文件形式。
attributes---一个或多个#import特性。用空格或逗号分隔每个特性。
例如:
#import "..\drawct\drawctl.tlb" no_namespace,raw_interface_only
OR
#import "..\drawct\drawctl.tlb" no_namespace raw_interfaces_only
备注:
filename 带引号的形式 指示预处理器首先在包含#import语句文件的目录中,然后再内容中包括(#include)该文件的任何文件的目录中查找类型库文件。预处理器然后沿如下所示的路径搜索。
带尖括号形式 指示预处理器沿下列路径搜索类型库文件:
1. “PATH”环境变量路径列表
2. “LIB”环境变量路径列表
3. 由/I(附加包含目录)编译器选项指定的路径,但该编译器搜索no_registry 属性的另一种类型库引用的类型库。
#import 创建两个标题文件来重新构造C++源代码内的类型库内容。主要标头文件类似于生产有Microsoft“接口定义语言”(MIDL)编译器生成的文件,但是是使用附加的编译器生成的代码。“主要标头文件”具有与类库相同的基名称以及.TLH扩展。次要头文件具有与类库相同的基名称,并包含有.TLH扩展。它在主要头文件中包含编译器生成的成员函数的实现并包含(#include)。
两个标题文件都位于/Fo(名称的对象文件)选项指定的输出目录中。然后它们读取由编译器编译,就像主要头文件由#include指令命名。
以下编译程序优化随#import指令一起:
1.创建头文件时,给定相同时间戳和类型库。
2.处理#import时,编译器首先检查标题是否存在并且最新。如果是,则不需要重新创建。
#import指令也可参与最小重新生成并能放置在预编译头文件中。
编译器为当前进程所需要的任何类型的类型依赖库提供完成路径。路径以注释形式写入编译器为每个以已处理的类型库生成的类型库表头(.TLH)。
如果类型库包含对其它类型中定义的类型的引用,则.TLH文件将包含以下排序的注释:
//Cross-refferenced type libraries:
//#import "c:\path\typelib0.tlb"
#import注释的实际文件名为交叉引用类型库的完整路径,存储在注册表。如果由于缺少类型定义遇到错误,请检查在.TLH头的注释来看可能需要先导入那个独立类型库。
首先,必须确定独立注释中的哪一项并非由系统标头提供,然后在独立类型共享库的#import指令前的某个的地方提供#import指令,已解决错误。
#import 可以选择包含一个或多个特性。这些特性通知编译器修改类型库标头的内容。杠(\)符号可以用来在单个#import语句中包含附加行。即起一种连接作用(和linux内核代码方式相似)
如:
#import “test.lib” no_namespace \
rename("OldName", "NewName")