#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++)的主要内容,如果未能解决你的问题,请参考以下文章

下面提到的 `#import` 指令有啥问题?

JSP的三大指令

page指令import属性实例

import tensorflow 出现非法指令(核心已转储)

JSP基础 指令page import 导包

c++打开外部exe并输入指令