当python通过ctypes调用导出的C++函数时,我得到访问冲突。访问.exe导出函数时Python ctypes访问冲突
我将问题范围缩小到下面的C++函数:(上vs2017编译)
#include <cstdio>
__declspec(dllexport) void x()
{
FILE* out = stdout; // After debugging, this is where the access violation happens.
}
当调用我得到以下错误的功能(即显示了VS调试时同样的错误):
Python代码:
ctypes.windll.<exe_name>.x()
错误:
OSError: exception: access violation writing 0x_some_address
关键因素是,上述内容被编译为EXE。
(整个事情开始时,我出口调用“主”入口点函数)
花费一些这方面的时间和努力的一切,我试图编译上面的DLL之后,现在它的工作如预期。
所以问题是,有人可以向我解释是什么导致了这个问题?
我知道(或多或少)的内存管理差异,但不是细节。
谢谢。
你是说你试图用'ctypes'调用'.exe'?请显示您的Python代码发生错误。还请显示函数的输出以及调用'main'的函数代码。 – cdarke
增加了py代码。 显示功能的导出。这是vs,所以dllexport是将它添加到vtable的。 调用main的函数是无关紧要的。我提出的问题是一个简洁的方式,所有需要的信息重现结果在这里。我只是提到它的背景。 –
'dllexport'与vtable无关。 vtable是用于支持虚函数的特定于C++的设备,它由VS之外的其他实现使用。 'dllexport'将函数名称存储在DLL的导出表中,是Windows特有的,并且也在C程序中使用。在DLL中,你有'DllMain()'函数吗? – cdarke