#import 指令 (C++)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#import 指令 (C++)相关的知识,希望对你有一定的参考价值。
#import 指令 (C++)
#import指令用于从一个类型库(Type Library)中结合信息。该类型库的内容被转换为C++类,主要用于描述COM界面。
一、 语法:
#import "filename" [attributes]
#import <filename> [attributes]
参数
filename:指定要导入的类型库。
filename 可以是以下项之一:
(1) 包含类型库的文件的名称,如 .olb、.tlb 或 .dll 文件。每个文件名之前可以放置关键字 file:。
(2) 类型库中控件的 progid。每个 progid 之前可以放置关键字 progid:。例如:#import "progid:my.prog.id.1.5"
(3) 类型库的库 ID。每个库 ID 前可以放置关键字 libid:。
例如:#import "libid:12341234-1234-1234-1234-123412341234" version("4.0") lcid("9")
(4) 可执行 (.exe) 文件。
(5) 包含类型库资源(例如 .ocx)的库 (.dll) 文件。
(6) 包含类型库的复合文档。
(7) 可由 LoadTypeLib API 理解的任何其他文件格式。
attributes:一个或多个 #import 特性。用空格或逗号分隔每个特性。
二、 文件名的搜索顺序
形式 |
操作 |
带引号的形式
|
指示预处理器首先在包含 #import 语句的文件目录中查找类型库,然后在包含 (#include) 该文件的任何文件目录中查找类型库文件。然后预处理器沿如下所示的路径执行搜索。 |
尖括号形式 |
指示预处理器沿下列路径搜索类型库文件: PATH 环境变量路径列表 LIB 环境变量路径列表 /I(附加包含目录)编译器选项指定的路径,但该编译器搜索另一具有 no_registry 特性的类型库引用的类型库。 |
三、 #import 特性
auto_rename
|
通过将两个下划线 (__) 追加到变量名称来重命名 C++ 保留字,从而解决可能的名称冲突。 |
auto_search
|
指定当使用 #import 引用了类型库,并且它本身引用了另一个类型库时,编译器可以为其他类型库执行隐式 #import。 |
embedded_idl |
指定将类型库写入保留了特性生成的代码的 .tlh 文件。 |
exclude (#import) |
从要生成的类型库标头文件中排除项。 |
high_method_prefix |
指定用于命名高级属性和方法的前缀。 |
high_property_prefixes |
指定用于三个属性方法的备用前缀。 |
implementation_only |
取消生成 .tlh 头文件(主要头文件)。 |
include() |
禁用自动排除。 |
inject_statement |
将其参数作为源文本插入类型库标头。 |
named_guids
|
告知编译器定义和初始化旧样式或 LIBID_MyLib、CLSID_MyCoClass、IID_MyInterface 和 DIID_MyDispInterface 形式的 GUID 变量。 |
|
|
no_auto_exclude |
禁用自动排除。 |
no_dual_interfaces |
更改编译器为双重接口方法生成包装器函数的方式。 |
no_implementation |
取消生成 .tli 标头,它包含包装器成员函数的实现。 |
no_namespace |
指定命名空间的名称不由编译器生成。 |
no_registry |
告知编译器不在注册表中搜索类型库。 |
no_search_namespace
|
与 no_namespace 特性的功能相同,但在类型库中使用时,可以将 #import 指令与 auto_search 特性结合使用。 |
no_smart_pointers |
取消对类型库中所有接口的智能指针的创建。 |
raw_dispinterfaces
|
告知编译器生成低级别的调度接口方法的包装器函数和调用 IDispatch::Invoke 并返回 HRESULT 错误代码的属性。 |
raw_interfaces_only
|
取消错误处理的包装器函数的生成以及使用那些包装器函数的 属性 (C++) 声明。 |
raw_method_prefix |
指定不同的前缀以避免名称冲突。 |
raw_native_types
|
禁止在高级包装器函数中使用 COM 支持类,并强制改用低级数据类型。 |
raw_property_prefixes |
指定用于三个属性方法的备用前缀。 |
重命名 (#import) |
解决名称冲突问题。 |
rename_namespace |
重命名包含类型库内容的命名空间。 |
rename_search_namespace
|
与 rename_namespace 特性的功能相同,但在类型库中使用时,可以将 #import 指令与 auto_search 特性结合使用。 |
tlbid |
允许加载主类型库之外的库。 |
以上是关于#import 指令 (C++)的主要内容,如果未能解决你的问题,请参考以下文章