如果想在Qt Creator里调用Vs2010生成的Dll,是否需要改头文件?

某大一菜鸟 2012-04-30 01:07:25
经过测试好像Qt的编译器无法顺利读Vs搞出来的宏声明...
...全文
332 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiebin133 2012-05-03
  • 打赏
  • 举报
回复
.lib是静态库,.dll是动态库,QT是可以用静态调用的方法调用动态库。
  • 打赏
  • 举报
回复
.lib 是跨平台的用法,在WIN上代表.dll,在Linux代表.a文件,当然,如果对应的平台直接指定对应的库文件,也是可以的,只不过将代码拿到另一个平台编译必须修改了
某大一菜鸟 2012-05-01
  • 打赏
  • 举报
回复
按道理,隐式调用不是应该链接某个 .a/.lib才对么?

Qt的编译器为什么可以通过这种方式顺利找到TestDll.dll中函数指针的入口?

按道理,为了实现函数重载,C++的编译器编译出来的函数名应该与原来的函数名不同才对,那为什么“test->writeFile();”能正常工作呢?难道是“#include <QtCore/qglobal.h>”这个头文件的作用?
某大一菜鸟 2012-05-01
  • 打赏
  • 举报
回复

TestDll.h

#ifndef TESTDLL_H
#define TESTDLL_H

#include "TestDll_global.h"

class TESTDLLSHARED_EXPORT TestDll {
public:
TestDll();
void writeFile();
};



#endif // TESTDLL_H


TestDll_global.h

#ifndef TESTDLL_GLOBAL_H
#define TESTDLL_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(TESTDLL_LIBRARY)
# define TESTDLLSHARED_EXPORT Q_DECL_EXPORT
#else
# define TESTDLLSHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // TESTDLL_GLOBAL_H



#include "testdll.h"
#include <fstream>
using namespace std;
TestDll::TestDll()
{
}

void TestDll::writeFile()
{
ofstream out("test.txt");
out<<"youSonofbitch"<<endl;
out.close();
}





另一个工程:
main.cpp

#include <QtCore/QCoreApplication>
#include "testdll.h"


int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

TestDll *test = new TestDll();
test->writeFile();

return a.exec();
}



.pro

#-------------------------------------------------
#
# Project created by QtCreator 2012-05-01T16:50:30
#
#-------------------------------------------------

QT += core

QT -= gui

TARGET = C++DllTest
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app


LIBS += "TestDll.dll"

SOURCES += main.cpp





想问下,“ LIBS += "TestDll.dll" ” 为什么可以这样来隐式调用?
  • 打赏
  • 举报
回复
宏只跟C++有关,与QT和VC无关

16,238

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧