• 6117阅读
  • 2回复

dumpcpp生成的头文件编译出错问题 [复制链接]

上一主题 下一主题
离线phoniexhao
 
只看楼主 倒序阅读 楼主  发表于: 2011-07-15
我的操作过程如下:
1、用 "dumpcpp sldworks.tlb -n SolidWorks"命令生成 sldworks.tlb 的接口文件solidworks.h和solidworks.cpp。
2、包含头文件到只包含main函数的源文件 main.cpp 后,编译错误信息如下(编译器为Visual Studio 2008):

1>d:\programs\qt4.7.3\include\activeqt\../../src/activeqt/container/qaxobject.h(77) : error C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'
1>        d:\programs\qt4.7.3\include\qtcore\../../src/corelib/kernel/qobject.h(309) : see declaration of 'QObject::QObject'
1>        d:\programs\qt4.7.3\include\qtcore\../../src/corelib/kernel/qobject.h(122) : see declaration of 'QObject'
1>        This diagnostic occurred in the compiler generated function 'QAxObject::QAxObject(const QAxObject &)'

3、工程中唯一的源文件main.cpp内容如下:
  1. #include <QApplication>
  2. #include "solidworks.h"
  3. int main(int argc, char *argv[])
  4. {
  5.     QApplication app(argc, argv);
  6.     return app.exec();
  7. }
4、附件中有sldworks.tlb文件,其实就是 SolidWorks2010安装目录
SolidWorks2010的类型库文件 sldworks.rar (343 K) 下载次数:2

离线phoniexhao
只看该作者 1楼 发表于: 2011-07-17
难道大家都没有遇到过此类问题麽?
离线phoniexhao
只看该作者 2楼 发表于: 2011-07-17
已找到原因:
通常,dumpcpp 会把 tlb 中的接口和coclass正常输出,且会配对生成qMetaTypeConstructHelper()函数,
例如 ISldWorks 对应的 qMetaTypeConstructHelper() 函数为:
template<>
inline void *qMetaTypeConstructHelper(const SolidWorks::ISldWorks *t)
{ Q_ASSERT(!t); return new SolidWorks::ISldWorks; }

而某些接口只生成一个简单的框架,例如 IEnumCurves 的形式如下:
// stub for vtable-only interface
class IEnumCurves : public QAxObject {};
而针对此种接口则没有对应的 qMetaTypeConstructHelper() 函数,但编译时找不到对应的 qMetaTypeConstructHelper() 函数,就会报错!
WTF!!!
快速回复
限100 字节
 
上一个 下一个