• 10881阅读
  • 9回复

利用qt编写一个类,编译成dll,然后调用这个dll的问题,请帮助,请给出一个详细的过程好吗? [复制链接]

上一主题 下一主题
离线gjczhhbz
 

只看楼主 倒序阅读 楼主  发表于: 2007-10-30
— 本帖被 XChinux 执行加亮操作(2007-10-31) —
大家好,请各位给予帮助。
qt :qt-win-commercial-4.3.2-msvc2005
system:windowXP

我自己建立了一个类(包括.h .cpp),然后建立工程文件,并将template置为lib,编译为dll文件,成功。(里面只生成了dll文件)

问题2:保留了.h文件,然后写一个main.cpp文件,在这个源文件中include这个dll的头文件,调用。
可是在编译的时候总过不去。

附件:
window.h

#ifndef WINDOW_H
#define WINDOW_H

#include <QtGui/QWidget>
class window :public QWidget
{
    Q_OBJECT
public:
    window(QWidget *parent = 0);
};
#endif

window.cpp
#include<QtGui\QtGui>

#include "window.h"

window::window(QWidget *parent):QWidget(parent)
{
    QPushButton *quit = new QPushButton("退出");
    quit->setFont(QFont("Times",18,QFont::Bold));

    QLCDNumber *lcd =new QLCDNumber(2);
    lcd->setSegmentStyle(QLCDNumber::Filled);

    QSlider *slider = new QSlider(Qt::Horizontal);
    slider->setRange(0,100);
    slider->setValue(0);

    QObject::connect(slider,SIGNAL(valueChanged(int)),lcd,SLOT(display(int)));
    QObject::connect(quit,SIGNAL(clicked()),qApp,SLOT(quit()));

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget(quit);
    mainLayout->addWidget(lcd);
    mainLayout->addWidget(slider);

    setLayout(mainLayout);
}
以上两个文件用来生成dll,在pro文件中将template置为lib
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××
main.cpp

#include <QtGui/QtGui>
#include "window.h"

int main(int argc,char *argv[])
{
    QApplication app(argc,argv);
    QApplication::setStyle(QStyleFactory::create("macintosh"));

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("gbk"));

    window wint;
    wint.show();

    return app.exec();
}

工程文件中添加了LIBS += -L :/mydll/ -lgeo

怎么编译也通不过,不知道为什么请各位帮助


[ 此贴被gjczhhbz在2007-10-31 17:59重新编辑 ]
离线XChinux

只看该作者 1楼 发表于: 2007-10-31
我这里试的可以的呀。

#include<QtGui\QtGui>
改为
#include <QtGui>
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线gjczhhbz

只看该作者 2楼 发表于: 2007-10-31
谢谢Xchinux,我采用了生成一个静态库(生成了lib文件,而不是dll),在编写程序的时候是正确的,也能够运行,但是生成dll之后,也是采用您说的,还是不成,出现了如下错误:

Microsoft (R) 程序维护实用工具 8.00.50727.762 版
版权所有 (C) Microsoft Corporation。保留所有权利。

        link /LIBPATH:"d:\Qt\4.3.2\lib" /NOLOGO /INCREMENTAL:NO /MANIFESTFILE:"release\libdll.interm
ediate.manifest" /SUBSYSTEM:WINDOWS /OUT:release\libdll.exe @C:\DOCUME~1\ZHANGH~1\LOCALS~1\Temp\nm13
0.tmp
main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall window::window(class QWidget *)" (?
?0window@@QAE@PAVQWidget@@@Z),该符号在函数 _main 中被引用
release\libdll.exe : fatal error LNK1120: 1 个无法解析的外部命令
NMAKE : fatal error U1077: “"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\link.EXE"”: 返回代
码“0x460”
Stop.

请Xchinux能给出详细的过程吗?谢谢,
离线bygreen

只看该作者 3楼 发表于: 2007-10-31
where are your _dllexport?
离线gjczhhbz

只看该作者 4楼 发表于: 2007-10-31
我以前写的程序都是基于控制台的,现在整到gui上就有点问题了,呵呵,dll调用我以前就没有接触过,现在要参与到一个项目中,要利用dll,所以现在是一点都不懂。最好有一个例子来说明对我来说,还能容易一点,对于生成staticlib这个我倒是很熟悉,也生成应用成功了。
离线浪漫天使
只看该作者 5楼 发表于: 2007-11-01
测试环境:window2003 qt332 vc60
附件: gjczhhbz.rar (2 K) 下载次数:127
离线gjczhhbz

只看该作者 6楼 发表于: 2007-11-01
谢谢,我测试了一下,成功了,谢谢,
离线landuochong

只看该作者 7楼 发表于: 2007-12-29
浪漫天使:
你的dll文件有什模用呢,删掉也没问题,根本没用阿。我想知道怎磨使用动态库文件
离线zhanglimin
只看该作者 8楼 发表于: 2008-05-09
生成动态连接库时的 函数名发生了变化。。。 调用时用正常的函数名时调用不到的
离线XChinux

只看该作者 9楼 发表于: 2008-05-09
如果是使用msvc,要将类导出的。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个