COM库使用与问题解决

tlb文件

com类型库文件。在需要使用对应com类的模块里,“#import …*.tlb”使用之。

tlh、tli文件

vc++编译器解析tlb文件生成的标准c++文件。因为odl和tlb并不是C++标准的东东,有必要把它们翻译成标准的C++类型,使得C++开发者可以使用。

tlh相当于类型申明(头文件),tli相当于定义实现(CPP文件)。

Warning

#import “A.tlb” no_namespace named_guids;编译后产生A.tlh和A.tli两个文件,但把TLB文件更新后,相应的两个文件没有更新。=》需要在菜单里选择 全部重新编译,否则编译器仍然会认为.tlh和.tli文件是最新的。

推荐: 把#import放进stdafx.h里,然后编译stdafx.cpp,这样也会生成.tlh .tli文件,而且更方便。

使用:#import

通过"#import"语句来加入COM组件,编译器自动生成COM组件中接口的所有包装类,而且封装对COM异常的处理,使我们可以采用强类型的方式进行调用。

【转】 #import ; tlb, tlh, tli 文件

Problem

无法打开源文件.tlh

  1. 直接使用#include包含tlh(未生效)。
  2. 其它方案:
    VS2017 import无法打开源文件 …/msado15.tlh (msado15.dll)
    vs2010引入ado后提示 无法打开源文件 …/Debug/msado15.tlh
  3. 将项目添加到自己的包含目录(生效,不知道为什么~)。
    在这里插入图片描述

enum重定义

主要原因:

  1. #import "C:\program files\common files\system\ado\msado15.dll"no_namespace rename("EOF","adoEOF")这样的导入语句,no_namespace表示没有命名空间,则使命名空间成为全局的,因此很容易产生冲突。如果去掉“no_namespace”,则表示有命名空间,ado的变量不是标准空间的,然而ado的命名空间名你不知道,变量还是无法使用命名空间定义,不过,你可以使用重命名机制定义一个命名空间。
    ADO数据库:3 类型重定义

  2. 与dbadoint.h文件中定义冲突。

方案1:

#pragma warning(disable:4146)  // 忽略一些警告
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF")
#pragma warning(default:4146)
using namespace ADODB;

方案2:

#pragma warning(disable:4146)
#import "C:\Program Files\Common Files\System\ado\msado15.dll" \
no_namespace \
rename("EOF","adoEOF") rename("DataTypeEnum","adoDataTypeEnum") \
rename("FieldAttributeEnum", "adoFielAttributeEnum") rename("EditModeEnum", "adoEditModeEnum") \
rename("LockTypeEnum", "adoLockTypeEnum") rename("RecordStatusEnum", "adoRecordStatusEnum") \
rename("ParameterDirectionEnum", "adoParameterDirectionEnum")
// 重命名,防止重定义

方案3:其它方案
C++ :error C2011:‘enum‘ type redefinition的解决方法汇总
VC ADO “ParameterDirectionEnum”:“enum” 类型等 重定义问题 解决方案

ADO ENUM 重定义问题

C++MFC error C2011:出现一堆重定义,点进去进入msado15.tlh

ADO-添加MSADO15.DLL及基本类对象的了解

解决方案:

其它资料

Microsoft:#import directive (C++)

VS2012中使用(#import导入)tlb文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值