c++动态加载中返回指向DLL中类的实例的问题。
编写一个DLL,DLL中定义了一个类和类的若干方法,为了不暴露借口使用def文件只输出了D1.cpp中的createInstance和deleteInstance方法,c...
编写一个DLL,DLL中定义了一个类和类的若干方法,为了不暴露借口使用def文件只输出了D1.cpp中的createInstance和deleteInstance方法,createInstance返回的是DLL中类的实例的指针。在编写调用DLL的工程时出现错误。
DLL工程:
inertface.h:
#ifndef ABCDEFG
#define ABCDEFG
virtual class d2{
public:
void out();
};
#endif
d1.h:
#include "inertface.h"
class d1:public d2{
public:
d1();
~d1();
void out();
};
d1.cpp:
#include "d1.h"
#include <stdio.h>
d1* CreateInstance(){
return new d1;
}
void DeleteInstance(d1 *p){
delete p;
}
d1::d1(){
printf("dll1 is loaded");
}
d1::~d1(){
printf("dll1 id unload");
}
void d1::out(){
printf("dll1 out");
}
调用DLL的工程:
mian.cpp:
#include "d1.h"
#include "inertface.h"
#include <stdio.h>
#include <windows.h>
typedef void * ( * DLLCREATEFUNC)(void);
int main(){
HINSTANCE hd;
hd=LoadLibrary("d1.dll");
if (hd==NULL)
{
printf("fail load");
return 0;
}
DLLCREATEFUNC createIns;
createIns=(DLLCREATEFUNC)GetProcAddress(hd,"CreateInstance");
d2 *dd;
dd=(d2*)DLLCREATEFUNC();
dd->out();
return 0;
}
链接时报错:
1>mian.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall d2::out(void)" (?out@d2@@QAEXXZ),该符号在函数 _main 中被引用
1>E:\c++ procect\MFC\D1\Debug\d1test.exe : fatal error LNK1120: 1 个无法解析的外部命令
头文件已经添加了,不知道这是为什么报错。请高手解答一下。 展开
DLL工程:
inertface.h:
#ifndef ABCDEFG
#define ABCDEFG
virtual class d2{
public:
void out();
};
#endif
d1.h:
#include "inertface.h"
class d1:public d2{
public:
d1();
~d1();
void out();
};
d1.cpp:
#include "d1.h"
#include <stdio.h>
d1* CreateInstance(){
return new d1;
}
void DeleteInstance(d1 *p){
delete p;
}
d1::d1(){
printf("dll1 is loaded");
}
d1::~d1(){
printf("dll1 id unload");
}
void d1::out(){
printf("dll1 out");
}
调用DLL的工程:
mian.cpp:
#include "d1.h"
#include "inertface.h"
#include <stdio.h>
#include <windows.h>
typedef void * ( * DLLCREATEFUNC)(void);
int main(){
HINSTANCE hd;
hd=LoadLibrary("d1.dll");
if (hd==NULL)
{
printf("fail load");
return 0;
}
DLLCREATEFUNC createIns;
createIns=(DLLCREATEFUNC)GetProcAddress(hd,"CreateInstance");
d2 *dd;
dd=(d2*)DLLCREATEFUNC();
dd->out();
return 0;
}
链接时报错:
1>mian.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall d2::out(void)" (?out@d2@@QAEXXZ),该符号在函数 _main 中被引用
1>E:\c++ procect\MFC\D1\Debug\d1test.exe : fatal error LNK1120: 1 个无法解析的外部命令
头文件已经添加了,不知道这是为什么报错。请高手解答一下。 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励20(财富值+成长值)
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询