gpt4 book ai didi

c++ - 从导出的 dll 函数访问 dll 中的全局数据

转载 作者:行者123 更新时间:2023-11-30 04:40:31 25 4
gpt4 key购买 nike

我正在用一些全局数据创建一个 C++ Win32 dll。有一个全局定义的 std::map 并且在 dll 中有导出函数将数据写入映射(当然是在获取写锁之后)。

我的问题是,当我从 dll DllMain 内部调用 write 函数时,它可以正常工作。但是当我从另一个程序加载 dll 并调用将数据写入全局映射的函数时,它给了我这个错误:

WindowsError: exception: access violation reading 0x00000008

有什么办法可以解决这个问题吗?从 DllMain 调用时,相同的函数可以访问 dll 中的全局数据,但是当从不同的进程调用时,它不能访问全局数据。请指教。

我正在使用 TDM-MinGW gcc 4.4.0 编译器。

编辑:好的,我已经弄清楚问题是什么,并感谢您的帮助,但问题不是构造函数问题或无法在全局空间中拥有 map ,而是 boost::python 中的问题使用。我已经对其进行了测试,但是由于我是从 python 或其他东西中调用 dll,所以 urllib2 模块没有加载到 dll 中。现在我必须看看如何修复它。

最佳答案

调用您的代码时,std::map 的构造函数似乎尚未运行。 Win32 DLL 中全局非 POD 的生命周期非常棘手,我不确定 MinGW 如何具体处理它。但可能是您编译 DLL 的方式将您自己的函数 (DllMain?) 设置为入口点,从而覆盖了调用构造函数的 CRT 初始化例程。

关于c++ - 从导出的 dll 函数访问 dll 中的全局数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1198893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com