Python:简单的ctypes dll加载产生错误
作者:互联网
我从MSDN DLL example创建了MathFuncsDll.dll并运行调用.cpp工作正常.现在,尝试使用类似ctypes在IPython中加载它
import ctypes
lib = ctypes.WinDLL('MathFuncsDll.dll')
在正确的文件夹中产生
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 28: ordinal not in range(128)
类似地在Python shell中产生
WindowsError: [Error 193] %1 is not a valid Win32 application
我应该改变什么?嗯,它可能是Win 7 64位对比某些32位dll还是什么对吗?我稍后会再次检查.
解决方法:
ctypes不能用于编写MathFuncsDLL示例的C语言.
相反,用C语言写入,或者至少导出一个“C”接口:
#ifdef __cplusplus
extern "C" {
#endif
__declspec(dllexport) double Add(double a, double b)
{
return a + b;
}
#ifdef __cplusplus
}
#endif
另请注意,调用约定默认为__cdecl,因此请使用CDLL而不是WinDLL(使用__stdcall调用约定):
>>> import ctypes
>>> dll=ctypes.CDLL('server')
>>> dll.Add.restype = ctypes.c_double
>>> dll.Add.argtypes = [ctypes.c_double,ctypes.c_double]
>>> dll.Add(1.5,2.7)
4.2
标签:python,ctypes,dll,windowserror 来源: https://codeday.me/bug/20191001/1839880.html