= =
SB了...我重贴..
这个是用vs2010生成的dll
outputDll.h
- // 下列 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
- // outputDll.cpp : 定义 DLL 应用程序的导出函数。
- //
- #include "stdafx.h"
- #include "outputDll.h"
- #include <fstream>
- // 这是导出变量的一个示例
- OUTPUTDLL_API int noutputDll=0;
- // 这是导出函数的一个示例。
- OUTPUTDLL_API int fnoutputDll(void)
- {
- return 42;
- }
- // 这是已导出类的构造函数。
- // 有关类定义的信息,请参阅 outputDll.h
- CoutputDll::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
- #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
跪求解释!~~