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

Python 通过ctypes访问DLL时会出现奇怪的函数结果?,python,dll,ctypes,dllexport,Python,Dll,Ctypes,Dllexport,我试图使用ctypes通过Python访问一些C代码,因此我编写了一个非常基本的DLL,如下所示,但在加载DLL和调用函数时得到了一个非常奇怪的结果 这是C代码,我使用OpenWatcom编译为DLL。你看不出有什么特别的东西: #include <stdio.h> __declspec(dllexport) int sum(int a, int b) { return (a + b); } 下面是调用DLL函数时的输出,Watcom编译器会在每个导出的名称中添加一个u。

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

这是C代码,我使用OpenWatcom编译为DLL。你看不出有什么特别的东西:

#include <stdio.h>

__declspec(dllexport) int sum(int a, int b) {
    return (a + b);
}
下面是调用DLL函数时的输出,Watcom编译器会在每个导出的名称中添加一个u。不要问…:

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
>>> 
无论传递给函数的参数是什么,我都会得到相同的输出

我希望有一个善良的灵魂能指出我的错误,让我摆脱痛苦-

提前感谢,


James

尝试指定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)

watcom编译器的默认调用约定是什么。尝试强制cdecl。否则我看不出这怎么会出错。它是有效的!你是我的英雄我的问题是,为什么导出的函数需要uu cdecl装饰??这不正是uu declspec吗??我不记得在从DLL导出函数的搜索中看到过这一点。任何想法都将不胜感激!再次感谢。@James,ctypes.cdll需要\uu cdecl调用约定。ctypes.windell使用u stdcall调用约定。这些是函数调用方和被调用方之间关于如何在堆栈上传递参数以及由谁清理参数的特定协议__declspecdllexport只表示函数是从DLL导出的,但与调用约定无关。