Добрый вечер. Пытаюсь перевести код, который написан на C. С dll вызываю функцию bladerf_get_device_list. Вот сам код:
Код:
typedef enum {
BLADERF_BACKEND_ANY,
BLADERF_BACKEND_LINUX,
BLADERF_BACKEND_LIBUSB,
BLADERF_BACKEND_CYPRESS,
BLADERF_BACKEND_DUMMY = 100,
} bladerf_backend;
#define BLADERF_DESCRIPTION_LENGTH 33
#define BLADERF_SERIAL_LENGTH 33
struct bladerf_devinfo {
bladerf_backend backend;
char serial[BLADERF_SERIAL_LENGTH];
uint8_t usb_bus;
uint8_t usb_addr;
unsigned int instance;
char manufacturer[BLADERF_DESCRIPTION_LENGTH];
char product[BLADERF_DESCRIPTION_LENGTH];
};
int CALL_CONV bladerf_get_device_list(struct bladerf_devinfo **devices);
Попробовал это все перевести в Delphi. Функция возвращает 1 (одно устройство подключено, но сама запись заполняется неверными данными)
Код:
Bladerf_Backend = (BLADERF_BACKEND_ANY, BLADERF_BACKEND_LINUX, BLADERF_BACKEND_LIBUSB, BLADERF_BACKEND_CYPRESS, BLADERF_BACKEND_DUMMY = 100);
PDevice = ^TDevice;
TDevice = record
backend : Bladerf_Backend;
serial : PAnsiChar;
usb_bus : Byte;
usb_addr : Byte;
instance : Integer;
manufacturer :PAnsiChar;
product :PAnsiChar;
end;
bladerf_get_device_list: function(point: PDevice): integer; cdecl;
//Try to execute
procedure TForm1.Button1Click(Sender: TObject);
var
myblade : TDevice;
pointer : PDevice;
begin
pointer := @myblade;
dongle_count:= bladerf_get_device_list(pointer);
myblade := pointer^;
Memo1.Lines.Add(myblade.serial);
Memo1.Lines.Add(myblade.manufacturer);
Memo1.Lines.Add(myblade.product);
end;
Нужна помощь. Спасибо