c - 将代码从 C 转换为 Delphi(使用 DLL)
问题描述
我需要你的帮助 ;)。尝试使用 SDR 接收器(刀片 RF)。我有 dll (bladeRF.dll)。我有一些关于 C 的代码(结构、枚举和函数)。C上的代码:
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 (Embarcadero 10.3) 上转换此代码。你能帮助我吗?我在德尔福上的代码:
Bladerf_Backend = (BLADERF_BACKEND_ANY, BLADERF_BACKEND_LINUX, BLADERF_BACKEND_LIBUSB, BLADERF_BACKEND_CYPRESS, BLADERF_BACKEND_DUMMY = 100);
PDevices = ^TDevices;
TDevices = 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: PDevices): integer; cdecl;
//Try to execute
procedure TForm1.Button1Click(Sender: TObject);
var
myblade : TDevices;
pointer : PDevices;
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;
函数返回值 (1)。但是记录有错误值。需要你的帮助。谢谢。
解决方案
我不会在这里给出完整的答案,但一些元素可以帮助你。代码有几个问题。
该记录应该被称为TDevice
(而不是TDevices
),因为它代表一个设备。它应该为具有正确大小的字符串( serial
, manufacturer
, )嵌入缓冲区;product
将指针改为 ( PAnsiChar
) 将不起作用。
bladerf_get_device_list()
接受一个指向 a 的指针TDevice
。那不是你给它的。
bladerf_get_device_list()
分配一个数组TDevice
并返回其大小。您应该检查返回的值。使用完数组后,您应该使用bladerf_free_device_list()
它来释放它。
推荐阅读
- standard-library - puts(NULL) - 为什么 WP+RTE 不抱怨?
- dynamics-crm - 如何在 Microsoft Dynamics 门户中编辑字段
- amp-html - 样式属性是否有助于 50k CSS 限制
- c++ - treap 中的旋转是否会违反它的堆排序或二叉搜索树的顺序?
- apache - 使用以下参数为我的主站点创建 beta 子域
- java - 即使定义了 mainClass,使用 JIB 构建也会找到多个有效的主类
- java - 如何从所有用户的 FirebaseRecyclerAdapter 隐藏当前用户?
- amazon-web-services - 如何查看配置文件和真实资源之间的差异
- python-3.x - 在 Python 中面临一个奇怪的“幻像文件系统”问题
- python - 将变量与 .get() 进行比较的问题