Найти - Пользователи
Полная версия: Access violation при вызове функции из dll
Начало » Python для экспертов » Access violation при вызове функции из dll
1
Maverick_B
Здравствуйте!
Есть dll, написанная на Delphi.
Описание функции из dll для подключения к БД:
 function IC_reg(aserver_host: Pchar;
                           aserver_port: Pchar;
                           arm:char;
                           user_name,password: Pchar;
                           var answer: Pchar; abufsize: integer):integer; stdcall;

Пример работающего кода на Delphi:
 procedure TForm1.RegBitBtnClick(Sender: TObject);
var rp: Pchar;
    ri: integer;
begin
GetMem(rp,32000);
ri:=IC_reg('127.0.0.1','6666',IRBIS_ADMINISTRATOR,'1','1',rp,32000);
Caption:=IntToStr(ri);
Memo1.Lines.Text:=String(rp);
FreeMem(rp);
end;

Мой код на Python:
 from ctypes import *
_dll = windll.irbis64_client
IC_reg = _dll.IC_reg
ServerIP = "127.0.0.1"
ServerPort = "6666"
ARM = "A"
Login = "1"
Password = "1"
sBuffer = c_wchar_p(" " * 32000)
Size = 32000
IC_reg.restypes = [c_wchar_p, c_wchar_p, c_wchar, c_wchar_p, c_wchar_p, c_wchar_p, c_int]
IC_reg.argtypes = [c_wchar_p, c_wchar_p, c_wchar, c_wchar_p, c_wchar_p, POINTER(c_wchar_p), c_int]
ans = IC_reg(ServerIP, ServerPort, ARM, Login, Password, byref(sBuffer), Size)

Как реализовать, подглядел тут: https://ru.stackoverflow.com/questions/766433/Вызов-функции-из-dll-написанной-на-delphi-из-python

При выполнении кода вываливается “Access violation at address 4004D597 in module ”irbis64_client.DLL“. Read of address 00000000.”
В чем может быть проблема?
ZerG
Что такое ARM?
На Делфи это IRBIS_ADMINISTRATOR
у вас “А”

попробуйте без переменных
ans = IC_reg(“127.0.0.1”) и так далее
Maverick_B
ZerG
Что такое ARM?На Делфи это IRBIS_ADMINISTRATORу вас “А”попробуйте без переменныхans = IC_reg(“127.0.0.1”) и так далее
В файле описания функций библиотеки задана переменная:
 IRBIS_ADMINISTRATOR = 'A';
Получается, что я просто использовал другое имя.

Без переменных пробовал - результат тот же, но для буфера (sBuffer) все равно нужна переменная, так как в нее функция пишет ответ.
ZerG
посмотрите
https://github.com/amironov73/PythonIrbis

Это готовая либа. В ней вы найдете методы подключения и решения вопросов.
Maverick_B
ZerG
посмотрите https://github.com/amironov73/PythonIrbisЭто готовая либа. В ней вы найдете методы подключения и решения вопросов.
Спасибо вам! Работает.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB