qt编译com服务异常问题一例

故障现象:

Couldn't resolve 'DumpIDL' symbol in D:\xxx\qt    midl release/xxtest2.idl /nologo /tlb release/xxtest2.tlb
\Processing release\xxtest2.idl
npguitest2.idl
c1: fatal error C1083: 无法打开源文件: “release\xxtest2.idl”: No such file or directory
midl : command line error MIDL1003 : error returned by the C preprocessor (2)
    D:\Qt\qt5_15_msvc_static_x86\bin\idc.exe release\xxtest2.dll /tlb release/xxtest2.tlb
    D:\Qt\qt5_15_msvc_static_x86\bin\idc.exe release\xxtest2.dll /regserver
CLiirary file D:\xxx\qt\build-xxtest2-vc2019-Release\release\xxtest2.dll doesn't appear to be a COM library
Failed to register server!

顺着doesn't appear to be a COM library 这段话去找QT的idc.exe工具源码,发现执行的操作是这样的:

主要是找一个叫做DllRegisterServer的函数,找一个别人编译好的,能用的dll,观察dll导出函数,发现确实导出了dllRegisterServer函数,如下图:

我自己不能用的是这样的:

这就搞明白为啥不行了,dll函数没有导出呗?顺着.pro工程文件和.pri子工程文件捋下去,最终找到了原因,老工程是qt4的,qt5编译的时候提示我要改一下配置写法,像下面这样:

 

那就按照配置修改吧,注释掉CONFIG+=qaxserver,写个新的QT+=axserver,问题就出在这个配置的改动上面了,这个工程配置文件里面负责链接dll导出函数相关的配置是下面这样的:


  qaxserver {
    DEF_FILE       += $$PWD/xxx.def
  } else {
    DEF_FILE       += $$PWD/xxxx.def
  }

将qaxserver改完了axserver以后这段配置不生效,结果自然就不会生成正确的导出函数了,TMD。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

peihexian

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值