如果在主要可执行文件和DLL中定义的子类(比如插件)中有基类,那么当您想要获取插件时会发生什么?
我正在寻找一篇文章/答案,澄清当你
时会发生什么plugin*
(它具有虚函数)我正在考虑vtable和其他C ++问题。例如,如果你卸载运行了一些插件的DLL stil ......“代码”将会消失吗?
答案 0 :(得分:2)
由于您在谈论插件,因此您必须执行LoadLibrary
之类的操作。假设Windows:
LoadLibrary
,然后调用GetProcAddress
。 DLL被加载到进程地址空间,你有指向暴露函数的指针。plugin*
(它具有虚函数)。您可以将GetProcAddress
的返回值强制转换为函数指针类型,然后调用它。一切都应该正常工作。delete
可能很危险,因为DLL可能有一个单独的内存管理器(取决于你使用的运行时)。FreeLibrary
,代码就消失了。您之前从GetProcAddress
获得的指针无效。我不知道具体的vtable问题。如果在代码仍在运行时卸载DLL,我会假设程序将在此时崩溃,因为代码地址空间无效。