码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • COM库使用与问题解决


    文章目录

    • tlb文件
    • tlh、tli文件
    • Warning
    • 使用:#import
    • Problem
      • 无法打开源文件.tlh
      • enum重定义
    • 其它资料

    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;
    
    • 1
    • 2
    • 3
    • 4

    方案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")
    // 重命名,防止重定义
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    方案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文件

  • 相关阅读:
    【千瓜行研】2022年11.11小红书保健品行业数据研报
    【Redis】zset常用命令&集合间操作&内部编码&使用场景
    韩国程序员面试考什么?
    为华生物Dextran-SH 葡聚糖巯基 巯基化葡聚糖的简介及应用说明
    iotdb优化
    多个pdf怎么合并成一个pdf?
    Android:rk3588 开发环境准备
    GBASE 8s dbspace配置参数
    (八)Vue3-huohuo-admin src构建-上
    设将n(n>1)个整数存放在一维数组R中。设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移P(0<P<n)个位置
  • 原文地址:https://blog.csdn.net/qq_21980099/article/details/127565867
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号