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 个无法解析的外部命令
头文件已经添加了,不知道这是为什么报错。请高手解答一下。
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励20(财富值+成长值)
人生做回自己
2015-01-02 · TA获得超过423个赞
知道小有建树答主
回答量:722
采纳率:100%
帮助的人:511万
展开全部
没有引用ilib文件,需要添加lib引用才能访问dll中的函数和类。
追问
动态加载也需要LIB文件吗,我生成DLL文件的时候是有LIB文件同时生成的,怎么添加这个文件呢?
追答
把lib文件加到引用工程的lib列表中
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式