如何动态加载的dll里的类

如何动态加载的dll里的类,第1张

定义一个纯抽象基类,就是除了纯虚函数没有别的东西的类。写在一份.H文件里。在DLL里,从在抽象基类派生子类,重载并实现基类里所有函数。并且用.DEF输出一个函数,类似于:

class CMyClassInDll : public IMyClassInDll

{

......

}

LPVOID PASCAL CreateObject()

{

return (LPVOID) new CMyClassInDll

}

然后在要调用该DLL的模块里也include那个抽象基类的头文件,然后定义一个该抽象基类的指针:

IMyClassInDll *pObj

加载DLL,获得从DEF里输出那个函数CreateObject(),怎么获得不说了,是一般方法了。

然后: pObj = (IMyClassInDll *)CreateObj()

OK啦,现在你可以通过 pObj->来使用CMyClassInDll类啦!最后要注意的是,好像用完后,

delete pObj会出错?我不清楚。反正你在IMyClassInDll里声明一个类似Release的函数,在该函数里delete this就成了!

这实际就是COM(至少是进程内组件)的C++实现的理论基础。是一个最简化版本的COM组件。

可以定义类,并导出。

如果另一个工程也是C++的话,使用比较简单,包含导出的类的定义的头文件,添加lib即可。

如果是跨语言,那就没有c格式的函数容易使用了。。

找另一台的电脑上去复制下这个缺失的文件。

可以尝试使用腾讯电脑管家来修复缺失DLL文件

1、打开腾讯电脑管家

2、电脑诊所

3、软件问题

4、丢失.Dll 文件

5、一键修复

6、完成

如果还是解决不了,去下一个文件直接复制进去就能搞定了


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/bake/11422709.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存