Delphi - 将字节发送到 DLL

问题描述 投票:0回答:1

我正在尝试使用 API 并与此函数进行通信:

BOOL SelectSpeed (int Device, byte SelectSpeed)

SelectSpeed
的参数预计为 0x01 或 0x02 等值。

我已经制作了其他可以正常工作的DLL函数,例如:

function InitDevices(): Integer; stdcall;  external 'LightNative.dll';

但是,当我尝试这个

SelectSpeed
函数时,无论我尝试将什么传递到
SelectSpeed
中,我仍然会收到错误。我尝试过
Byte
PByte
String
uint8
integer
等等。

我应该在Delphi中使用什么类型来直接翻译为

Byte

function SelectSpeed(Device: integer; SelectSpeed: Byte) : Boolean; stdcall; external 'LightNative.dll';

传入变量示例:

procedure TMainForm.InitializeLight;
begin
  InitBlyncDevices();
  SelectLightFlashSpeed(0, 1);
end;
delphi dll byte
1个回答
0
投票

使用Delphi的

Byte
是正确的。但您确实需要让返回类型使用 4 字节
LongBool
(例如
Winapi.Windows.BOOL
),而不是 1 字节
Boolean

更重要的是,您确定 DLL 函数实际上使用的是

stdcall
而不是
cdecl
? 您所显示的 DLL 函数声明中没有指定调用约定,因此在编译 DLL 时它将依赖于编译器的默认值。
cdecl
是大多数 C 编译器的默认设置,但
stdcall
也是可能的。两者在 C API 中都很常见。 这实际上取决于编译器的配置。

仔细检查 DLL 的

.h
头文件和/或文档。如果没有提及实际使用的调用约定,那么您应该假设
cdecl
除非另有证明。

© www.soinside.com 2019 - 2024. All rights reserved.