访问.exe导出函数时,Python ctypes访问冲突

时间:2017-08-26 19:41:45

标签: python c++ ctypes access-violation

在python上通过ctypes调用导出的c ++函数时,我遇到了访问冲突。

我将问题缩小到以下c ++函数:(在vs2017上编译)

fstream

调用该函数时,我收到以下错误(与vs调试时显示的错误相同):

Python代码:

#include <cstdio>
__declspec(dllexport) void x()
{
    FILE* out = stdout; // After debugging, this is where the access violation happens.
}

错误:

  

OSError:异常:写入0x_some_address的访问冲突

关键因素是,上面编译为EXE。
(当我导出一个调用'main'入口点的函数时,整个事情就开始了)

花了一些时间在这上面并尝试了所有内容后,我尝试将上面的内容编译为DLL,现在它正在按预期工作。

所以问题是,有人可以向我解释导致问题的原因吗?
我(或多或少)知道内存管理的差异,但不知道细节。

感谢。

1 个答案:

答案 0 :(得分:2)

本文似乎为此提供了足够的背景信息和可能的解决方案: https://www.codeproject.com/Articles/1045674/Load-EXE-as-DLL-Mission-Possible

主要区别是加载EXE作为DLL:

  
      
  • 未初始化CRT,包括任何全局变量和
  •   
  • 导入地址表未正确配置,这意味着对导入函数的所有调用都将崩溃。
  •