刚刚接触QT,在VS2008下开发一个QT动态库
创建库的代码如下
头文件
#ifndef STRINGLIB_H
#define STRINGLIB_H
#include "stringlib_global.h"
#include <string>
using namespace std;
#ifdef Q_WS_WIN
#define MY_EXPORT __declspec(dllexport)
#else
#define MY_EXPORT
#endif
class STRINGLIB_EXPORT StringLib
{
public:
StringLib();
~StringLib();
public:
string GetHelloString();
int add (int a, int b );
private:
};
#endif // STRINGLIB_H
源文件
#include "stringlib.h"
StringLib::StringLib()
{
}
StringLib::~StringLib()
{
}
extern "C" MY_EXPORT int StringLib::add( int a, int b )
{
return a + b;
}
extern "C" MY_EXPORT string StringLib::GetHelloString()
{
return "Hello World QT";
}
加载动态库的程序代码如下:
#include <QtCore/QCoreApplication>
#include <QtCore>
#include <QLibrary>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
/*这里创建一个QLibrary对象,"D:/QT Study/StringLib/dll/StringLib.dll是我在上篇中创建的,dll后缀不用写*/
QLibrary mylib("D:/QT Study/StringLib/dll/StringLib");
if(mylib.load())
{
/* 用load()来加载dll成功*/
printf("load DLL success!\n");
typedef string(*StringFunc)();
typedef int (*AddFunc)(int a, int b);
AddFunc add = (AddFunc)mylib.resolve("add");
if (add)
{
printf("resunt % d", add(1,2));
}
else
{
printf("resolve failed!\n");
}
/*用resolve来解析GetHelloString函数*/
StringFunc String=(StringFunc)mylib.resolve("GetHelloString");
if(String)
{
/*解析成功,Double函数指针不为0,可以调动了*/
printf("%s",String);
}
else
{
printf("resolve failed!\n");
}
}else
{
printf("load DLL failed!\n");
}
return a.exec();
}
load动态库是可以的,但是resolve函数返回的总是空指针。觉得很奇怪,请大侠指点,谢谢