通过ctypes访问DLL时出现奇怪的函数结果?

时间:2012-03-21 21:41:18

标签: python dll ctypes dllexport

我正在尝试使用ctypes通过Python访问一些C代码,所以我编写了一个非常基本的DLL(如下所示),但在加载DLL并调用函数时得到一个非常奇怪的结果。

这是C代码,我使用Open Watcom编译为DLL。没什么好看的,你可以看到:

#include <stdio.h>

__declspec(dllexport) int sum(int a, int b) {
    return (a + b);
}

这是我调用DLL函数时的输出(Watcom编译器在每个导出的名称中添加_。不要问......):

Python 3.2.2 (default, Sep  4 2011, 09:51:08) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> from ctypes import cdll
>>> mydll = cdll.LoadLibrary('c:\\dev\\C\\TestDLL\\test.dll')
>>> mydll
<CDLL 'c:\dev\C\TestDLL\test.dll', handle 1cb0000 at 1910a30>
>>> mydll.sum_(8,3)
4451768
>>> 

无论将哪些参数传递给函数,我都会获得SAME输出...

我会感激某种善意的灵魂指出我的方式的错误,并让我摆脱痛苦。 : - )

提前致谢,

詹姆斯

1 个答案:

答案 0 :(得分:0)

尝试指定cdecl调用约定。适合我:

#include <stdio.h>
__declspec(dllexport) int __cdecl sum(int a, int b) { return (a + b); }


import ctypes
ctypes.CDLL('test.dll')._sum(8,3)