Найти - Пользователи
Полная версия: Объявить структуру ctypes при работе с delphi dll
Начало » Python для экспертов » Объявить структуру ctypes при работе с delphi dll
1
beardrinker
Работаю с динамической библиотекой написанной на delphi
Есть такая структура:

 TRec1 = packed record
    Version:UInt32
end;
Prec=^TRec1
function get_version(ARec: PRec): integer;
begin
  Result := 1;
  FillChar(ARec, SizeOf(TRec1), 0);
  ARec^.Version := 2;
  Result := 0;
end;

Есть функция get_version, которая принимает указатель на эту структуру и должна вернуть ее заполненной.

Код Python:

 from ctypes import *
class TRec1(Structure):
    _pack_ = 1
    _fields_=[
            ('Version',c_uint32)           
            ]
PRec1=TRec1()
a=cdll.LoadLibrary('/home/Test_In_memmory_perfomance/lib.so')
print a.get_version(PRec1)

В итоге ф-ция возвращает ошибку, что указатель на структуру равен Null.
При попытке вызова a.get_version('str') - ф-ция отрабатывает, но стринга мне ничего не заполнит.
Правильно ли я объявил структуру?
beardrinker
Помогло вот это:
print a.get_version(byref(PRec1)

Буду благодарен если кто-нибудь сможет объяснить почему это помогло
doza_and
beardrinker
объяснить почему это помогло
Так все и так ясно. Передача по ссылке и по значению это разные вещи.

А код выглядит странно что в питоне что в паскале. Вполне можно было обойтись передачей указателя на int32 без __pack__=1, без struct и других танцев с бубном.
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