• 6152阅读
  • 5回复

QLibrary 使用问题-新手求救 [复制链接]

上一主题 下一主题
离线zsq4ever
 
只看楼主 倒序阅读 楼主  发表于: 2009-05-08
刚刚接触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函数返回的总是空指针。觉得很奇怪,请大侠指点,谢谢



离线zsq4ever
只看该作者 1楼 发表于: 2009-05-12
问题自己搞定
离线lvyankun
只看该作者 2楼 发表于: 2009-05-13
遇到了同样的问题,请问是怎么解决的?
离线shiqx429
只看该作者 3楼 发表于: 2010-02-10
请问这个问题哪位能解答一下啊,为什么resolve函数返回的总是空指针还能用?? 谢谢!
离线steinlee

只看该作者 4楼 发表于: 2010-02-11
ddd
Looking for remote C/C++ and Qt 兼职
离线redcoco
只看该作者 5楼 发表于: 2011-07-06
回 楼主(zsq4ever) 的帖子
挖一下   楼主问题怎么解决的。。。。
快速回复
限100 字节
 
上一个 下一个