我创建一个C ++的Win32 DLL与一些全局数据。有一个std ::地图全局定义并有在该写数据到地图(获取写锁定后着,当然)的dll导出函数。

我的问题是,当我打电话写功能从DLL的DllMain里面,它的工作没有任何问题。但是,当我从另一个程序加载的dll和调用数据写入全球地图的功能,它给了我这个错误:

WindowsError: exception: access violation reading 0x00000008

有什么可约这样做?从调用DllMain时,同样的功能可以访问全局数据的DLL,但是从一个不同的进程调用的时候,它没有进入全球数据。请指点。

我使用的TDM-MinGW的GCC 4.4.0编译器。

修改 好吧,我想通了,问题是什么,并感谢帮助球员,但问题是没有用的构造问题,或者无法在全球空间的地图,但在提升的问题::蟒蛇,我是使用。我测试过,但因为我是用Python调用或者也可以是内部的DLL时,urllib2的模块没有得到载入DLL。现在,我要看看如何解决它。

有帮助吗?

解决方案

貌似std::map的构造函数时,你的代码被称为根本没有运行。在一个Win32 DLL全球非舱体的寿命是很棘手的,而我不能确定为MinGW的如何专门处理它。但它可能是你编译DLL的方式,你设定自己的函数(DllMain?)为切入点,从而推翻了CRT初始化程序调用构造函数。

其他提示

在如此低的存储器地址

一个读取错误一般意味着你正在试图访问某处NULL指针。你能告诉你的实际代码?

您必须使用共享存储器,这是因为不同的方法具有独立的地址空间。 我想你不会得到的std ::地图运行。我会建议使用MapViewOfFile,的CreateFileMapping,OpenFileMapping,......和普通的旧数据。问谷歌/ MSDN。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top