【问题标题】:how to use getprocadderss to a struct or STL如何将 getprocadderss 用于结构或 STL
【发布时间】: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,所以这也很重要。正确地做到这一点确实不容易。

标签: c++ struct dll stl


【解决方案1】:

如果stl::vector 对应用程序来说是全局的,您可以简单地将引用传递给 DLL 中的函数。

如果stl::vector 相对于 DLL 是全局的,那么您可以让 DLL 中的函数返回对它的引用。但是,如前所述,如果有可能使用不同版本的 STL 编译 DLL 和应用程序,则可能会出现问题,但您可能会使用过去某个时间编译的 DLL。跨越 C++ 规范很可能是主要问题。如果应用程序和 DLL 同时编译,则无需担心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    相关资源
    最近更新 更多