首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

想问下这个动态调用Dll为何出错.

2012-07-30 
想问下这个动态调用Dll为什么出错..这个是用vs2010生成的dlloutputDll.hC/C++ code// 下列 ifdef 块是创建

想问下这个动态调用Dll为什么出错..

这个是用vs2010生成的dll

outputDll.h

C/C++ code
// 下列 ifdef 块是创建使从 DLL 导出更简单的// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 OUTPUTDLL_EXPORTS// 符号编译的。在使用此 DLL 的// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将// OUTPUTDLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的// 符号视为是被导出的。#ifdef OUTPUTDLL_EXPORTS#define OUTPUTDLL_API __declspec(dllexport)#else#define OUTPUTDLL_API __declspec(dllimport)#endif// 此类是从 outputDll.dll 导出的class OUTPUTDLL_API CoutputDll {public:    CoutputDll(void);    // TODO: 在此添加您的方法。    void writefile();};extern OUTPUTDLL_API int noutputDll;OUTPUTDLL_API int fnoutputDll(void);extern "C"{    OUTPUTDLL_API CoutputDll* getClass();}



outputDll.cpp
C/C++ code
// outputDll.cpp : 定义 DLL 应用程序的导出函数。//#include "stdafx.h"#include "outputDll.h"#include <fstream>// 这是导出变量的一个示例OUTPUTDLL_API int noutputDll=0;// 这是导出函数的一个示例。OUTPUTDLL_API int fnoutputDll(void){    return 42;}// 这是已导出类的构造函数。// 有关类定义的信息,请参阅 outputDll.hCoutputDll::CoutputDll(){    return;}void CoutputDll::writefile(){    std::ofstream outfile;    outfile.open("test.txt");    for (int iter = 0; iter != 100; ++iter)    {        outfile<<"This is TEST!"<<std::endl;    }    outfile.clear();    outfile.close();}CoutputDll* getClass(){    return new CoutputDll();}



然后我在Qt上同QLibrary动态调用这个dll:
main.cpp
C/C++ code
#include <QtCore/QCoreApplication>#include <QLibrary>#include <iostream>#include "outputDll.h"using namespace std;typedef CoutputDll* (*fun)();int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);    QLibrary mylib;    char name[10];    cout<<"input the dll name"<<endl;    while(cin>>name){        mylib.setFileName(name);        if(mylib.load()){            fun getclass = (fun)mylib.resolve("returnClass");            if(getclass){                CoutputDll *test = getclass();                test->writefile();                delete test;            }            else                cout<<"funtion Error"<<endl;        }        else            cout<<"load Error"<<endl;        mylib.unload();    }    return a.exec();}


不成功,出现错误提示:
undefined reference to `_imp___ZN10CoutputDll9writefileEv'
collect2: ld returned 1 exit status


跪求解释!~~


[解决办法]
fun getclass = (fun)mylib.resolve("returnClass");
[解决办法]
错误提示调用了未定义的类成员函数。说明愿望中的通过调用函数返回一个类的实例未成功。
mylib.resolve("returnClass")改为mylib.resolve("getClass");

热点排行