故障现象:
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。