的Python:简单ctypes的DLL加载率误差(Python: simple ctypes dl

2019-06-23 15:17发布

我从创建MathFuncsDll.dll MSDN DLL例子并运行调用的.cpp工作的罚款。 现在,想在IPython的与喜欢的ctypes加载此

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或正确的事情? 我将在后面检查的时候我再没有来得及。

Answer 1:

ctypes不与C ++,其MathFuncsDLL示例被写入工作。

相反,用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: simple ctypes dll load yields error