#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


允许加载主类型库之外的库。

 

时间: 2025-01-16 08:14:33

#import 指令 (C++)的相关文章

07_传智播客iOS视频教程_#import指令

预处理指令的执行时机是在编译之前.在编译之前执行预处理指令. #import指令是包含文件,将指定的文件的内容在预编译的时候拷贝到写指令的地方. #import指令无论把一个文件import了多少次,它只会包含一次.include指令如何实现这个效果?

#import 指令

[#import 指令] #import指令用于从一个类型库中结合信息.该类型库的内容被转换为C++类,主要用于描述COM界面. 语法 #import "文件名" [属性] #import <文件名> [属性] 属性: 属性1,属性2,... 属性1 属性2 ... 文件名是一个包含类型库信息的文件的名称.一个文件可为如下类型之一: * 一个可执行(.EXE)文件. * 一个包含类型库资源(如.OCX)的库文件(.DLL). * 其它可被LoadTypeLib API支持的

@import指令与link的区别及二者的使用注意事项

首先,二者都是从外部引入css文件的方式,其中@import语句需要放在css文件或者style标签中,且必须放在开头部分! <link rel='stylesheet' href='a.css'> Or you can use the @import rule: <style> @import url('a.css'); </style> @import VS  Link ,二者的区别 link属于XHTML标签,而@import完全是CSS提供的一种方式: 加载顺序

JSP常用指令

一.指令元素1.page指令importsessioncontentTypebufferisTreadSafeinfoerrorPageisErrorPage2.include指令3.taglib指令二.脚本元素1.声明元素2.表达式元素3.脚本元素4.注释元素三.标准动作元素1.<jsp:param>2.<jsp:include>3.<jsp:forward>4.<jsp:plugin>5.<jsp:useBean>6.<jsp:setP

FreeMarker FTL常用指令(3)

1.FreeMarker的3种FTL标签 ①开始标签:<#directivename parameter>②结束标签:</#directivename>③空标签:<#directivename parameter/> 在FreeMarker中,使用FTL标签来使用指令,这和HTML标签是完全类似的.使用标签时前面的符号#也可能变成@,如果该指令是一个用户指令而不是系统内建指令时,应将#符号改成@符号. 2.FreeMarker的常用指令  FreeMarker的常用指令

JSP之使用useBean、setProperty、getProperty指令

useBean指令用于在JSP页面中初始化一个Java实例,setProperty指令用于为JavaBean实例的属性设置值,getProperty指令用于输出JavaBean实例的属性. 例子: JavaBean代码如下: package zhou; public class Person { private String name; private int age; public String getName() { return name; } public void setName(St

css学习之LInk &amp; import

一.用link加载外部样式表 1.放置位置:放在head元素中 2.样式表中只能包含样式规则,不能包含其他标记语言.如出现了标记,会导致其中一部分或全部被忽略. 3.type = 'text/css'可以指定文件是以.css后缀名传递的,并以样式表的规则处理导入数据,较老的浏览器不可以必须要以.css后缀命名文件. 4.media 属性,all,aural,braille,embossed,handheld,print,projection,screen,tty,tv,其中得到广泛支持的是all

ASP.NET中的指令:

来源:http://www.cnblogs.com/zhuisha/archive/2008/07/02/1234222.html @Page指令: @Page指令只能在.aspx页中使用.如果在其他页面中使用会发生编译错误. @Page指令的属性的列表: 用于页面编译的属性: 属性 描述 ClassName 规定在页被请求时将被动态编译的类的名称,必须是一个没有名称空间信息的类名. CodeFile 指明当前页的代码隐藏类的路径,该类的源文件必须部署到Web服务器.ASP.net 1.1中不支

asp.net中@ Import 命令的使用

@ Import 将命名空间显式导入到 ASP.NET 应用程序文件(如网页.用户控件.母版页或 Global.asax 文件)中,同时使导入的命名空间的所有类和接口可用于文件.导入的命名空间可以是 .NET Framework 类库或用户定义的命名空间的一部分. <%@ Import namespace="value" %> 属性 namespace 要导入的命名空间的完全限定名.这可以包括任何包含在 .NET Framework 中的命名空间或自定义命名空间. 备注 @