【发布时间】:2020-11-11 10:16:52
【问题描述】:
我对 DLL:s 很陌生,我尝试过使用带有静态链接和动态链接的 DLL,但这是我第一次使用运行时链接(它使用 LoadLibrary 来访问),现在我正在尝试在我的client.exe 中使用我的全局std::vector 是否有可能做GetProcAddress() 来获得这个STL?或者是否可以GetProcAddress 一些存储在 DLL 中的结构?
【问题讨论】:
-
您可以编写一个返回您的
std::vector的函数,然后使用GetProcAddress将其导入。 -
不能用 extern "C" 做吗?和访问冲突?
-
虽然您可以返回指向您在 DLL 中构造的
std::vector的指针,但您必须确保 DLL 的用户使用相同的std::vector定义。这并不容易(我什至认为不可能安全地做到这一点)。您可以创建自己的类(这样您就知道定义是否合适),并且要小心确保在 DLL 内创建的对象的销毁也在 DLL 内完成。 DLL 和用户可能不会使用与 DLL 中相同的malloc/free,所以这也很重要。正确地做到这一点确实不容易。