com类型库文件。在需要使用对应com类的模块里,“#import …*.tlb”使用之。
vc++编译器解析tlb文件生成的标准c++文件。因为odl和tlb并不是C++标准的东东,有必要把它们翻译成标准的C++类型,使得C++开发者可以使用。
tlh相当于类型申明(头文件),tli相当于定义实现(CPP文件)。
#import “A.tlb” no_namespace named_guids;编译后产生A.tlh和A.tli两个文件,但把TLB文件更新后,相应的两个文件没有更新。=》需要在菜单里选择 全部重新编译,否则编译器仍然会认为.tlh和.tli文件是最新的。
推荐: 把#import放进stdafx.h里,然后编译stdafx.cpp,这样也会生成.tlh .tli文件,而且更方便。
通过"#import"语句来加入COM组件,编译器自动生成COM组件中接口的所有包装类,而且封装对COM异常的处理,使我们可以采用强类型的方式进行调用。
【转】 #import ; tlb, tlh, tli 文件
主要原因:
#import "C:\program files\common files\system\ado\msado15.dll"no_namespace rename("EOF","adoEOF")
这样的导入语句,no_namespace表示没有命名空间,则使命名空间成为全局的,因此很容易产生冲突。如果去掉“no_namespace”,则表示有命名空间,ado的变量不是标准空间的,然而ado的命名空间名你不知道,变量还是无法使用命名空间定义,不过,你可以使用重命名机制定义一个命名空间。
ADO数据库:3 类型重定义
与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” 类型等 重定义问题 解决方案
C++MFC error C2011:出现一堆重定义,点进去进入msado15.tlh
解决方案: