Может ли Python вызывать функции Delphi в DLL? - PullRequest
8 голосов
/ 09 января 2012

Я пытаюсь вызвать функции из DLL, которая, кажется, создана в Delphi. Пример некоторых функций, поддерживаемых DLL:

function oziDeleteWpByName(var name:pansichar):integer;stdcall

Код Python, который я написал для доступа к вышеуказанным функциям, не работает.

from ctypes import *
libc = cdll.OziAPI
name ='test'

pi = pointer(name)

delname = libc.oziDeleteWpByName

delname(name)

Кажется, я передаю неверный тип данных в функцию. Есть идеи, как это сделать правильно?

Спасибо, это сработало. Теперь, пожалуйста, помогите с этой функцией:

function oziGetOziVersion (var Version: pansichar; var DataLength: integer): целое число; stdcall; Версия OziExplorer возвращается в переменной Version.

Теперь, как мне передать 'var version', когда она будет возвращена.

Ответы [ 2 ]

11 голосов
/ 09 января 2012
from ctypes import *

# Not strictly needed but it's good to be explicit.
windll.OziAPI.oziDeleteWpByName.argtypes = [POINTER(c_char_p)]
windll.OziAPI.oziDeleteWpByName.restype = c_int

p = c_char_p('test')
retval = windll.OziAPI.oziDeleteWpByName(byref(p))
1 голос
/ 09 января 2012

В Delphi параметр var передается по ссылке.Так что у вас есть указатель на PAnsiChar (он же указатель строки в стиле C).Если вы передаете ему строковый указатель вместо указателя на строковый указатель, он не будет работать.

...