Странный результат функции при доступе к DLL через ctypes? - PullRequest
0 голосов
/ 22 марта 2012

Я пытаюсь получить доступ к некоторому коду C через Python, используя ctypes, поэтому я написал очень простую DLL (как показано ниже), но получил очень странный результат при загрузке DLL и вызове функции.

Вот код C, который я скомпилировал как DLL, используя Open Watcom. Ничего особенного, как вы можете видеть:

#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
>>> 

Я получаю тот же вывод независимо от того, какие параметры передаются в функцию ...

Я был бы признателен за то, что какая-то добрая душа указала на ошибку моих путей и избавила меня от страданий. : -)

Заранее спасибо,

Джеймс

1 Ответ

0 голосов
/ 22 марта 2012

Попробуйте указать соглашение о вызовах 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)
...