#import 指令 (C++)

本文详细介绍了C++中的#import指令,用于导入类型库,将其转换为C++类,主要应用于COM接口。内容涵盖导入类型库的不同方式,如文件名、progid、libid等,以及各种属性的使用。同时,解释了编译器如何处理#import指令,创建头文件,并在遇到类型库引用时的处理策略。此外,还讨论了编译优化和错误处理,特别是处理类型库交叉引用的方法。
部署运行你感兴趣的模型镜像

  已用于合并类型库中的信息。该类型库的内容转换为C++类,主要描述COM接口。

  #import "filename" [attributes]

  #import <filename> [attributes]

例如:

  #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")

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值