• 12479阅读
  • 6回复

把用QT写的类用 __declspec( dllexport )导出 DLL时出错 [复制链接]

上一主题 下一主题
离线leon0356
 
只看楼主 倒序阅读 楼主  发表于: 2009-12-17

错误提示
错误    2    error C2491: “ParameterWindowR::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义    d:\editor\PHUSIS\PHUObject\PHUObject\generatedfiles\debug\moc_ParameterWindowR.cpp    38    


ParameterWindowR是我用QT写的类,出错位置是在moc_ParameterWindowR.cpp的


   ->const QMetaObject ParameterWindowR::staticMetaObject = {
       { &QMainWindow::staticMetaObject, qt_meta_stringdata_ParameterWindowR,
         qt_meta_data_ParameterWindowR, 0 }
    };
离线leon0356
只看该作者 1楼 发表于: 2009-12-17
顶一顶,求回答
离线leon0356
只看该作者 2楼 发表于: 2009-12-17
我已经纠结了好几天了,都没有办法,换了种导出的方法虽然没有上面哪个错误,但又除了新的错误

1>main.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const test::staticMetaObject" (?staticMetaObject@test@@2UQMetaObject@@B)
1>test2.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const test::staticMetaObject" (?staticMetaObject@test@@2UQMetaObject@@B)
1>moc_test2.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const test::staticMetaObject" (?staticMetaObject@test@@2UQMetaObject@@B)

都是staticMetaObject静态变量惹的祸,staticMetaObject在moc_ParameterWindowR.cpp,是自动生成的代码。


是不是我的导出方法不好吗?请用过QT导出的朋友教我一种可用的导出方法
离线dingcai

只看该作者 3楼 发表于: 2009-12-17
把类调到最小 ,贴代码
离线leon0356
只看该作者 4楼 发表于: 2009-12-18
工程1(生成DLL)
//test.h
#ifndef TEST_H
#define TEST_H

#include <QtGui/QMainWindow>


#ifdef DLL_FILE
class  _declspec(dllexport) test : public QMainWindow
#else
class  _declspec(dllimport) test : public QMainWindow
#endif
{
    Q_OBJECT

public:
    test(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~test();

private:

};
#endif // TEST_H



//test.cpp
#ifndef DLL_FILE
#define DLL_FILE
#endif

#include "test.h"
test::test(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{

}

test::~test()
{

}

编译这个生成DLL的工程出现
错误    2    error C2491: “ParameterWindowR::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义    d:\editor\PHUSIS\PHUObject\PHUObject\generatedfiles\debug\moc_ParameterWindowR.cpp    38    
离线龙平安

只看该作者 5楼 发表于: 2010-07-28
很可能的原因是你的.pro 文件中没有包含 test.h

这样moc才能生成所需要的函数.
离线huiliangsm
只看该作者 6楼 发表于: 2011-03-22
r rr
快速回复
限100 字节
 
上一个 下一个