c - 如何使用正确的变量值在 Delphi 中调用 dll C 函数?

标签 c delphi dll

我已将以下内容从“RFIDAPI.dll”C 函数转换为 Delphi:

bool SAAT_YTagSelect( void *pHandle, 
                      unsigned char nOpEnable, 
                      unsigned char nMatchType, 
                      unsigned char *MatchData, 
                      unsigned char nLenth )

function SAAT_YTagSelect( pHandle: Pointer; 
                          nOpEnable, 
                          nMatchType, 
                          MatchData, 
                          nLenth: PAnsichar): Boolean; stdcall;

我正在尝试调用该函数,但遇到了访问冲突。显然我没有为 nOpEnable 1Byte 变量分配正确的值。

变量 nOpEnable 蜂鸣器或 LED 使能(1byte):

1: enable
0: disable
7   6   5   4   3   led buzzer
N/A N/A N/A N/A N/A 1   1
procedure TForm5.Button4Click(Sender: TObject);
 var
  hp: Pointer;
  b: array[0..7] of AnsiChar;
begin
   b[0] := '1';
   b[1] := '1';
   b[2] := '0';
   b[3] := '0';
   b[4] := '0';
   b[5] := '0';
   b[6] := '0';
   b[7] := '0';
    if SAAT_YTagSelect(hp, b, '0x01', '84500080', '8') then
      StatusBar1.Panels[1].Text := 'Tag Selected';
end;

最佳答案

unsigned char参数是1字节整型,不是字符串...所以对应Delphi的Byte而不是PAnsiChar。每个蜂鸣器/LED 的数字是要在该字节中设置的位位置,而不是字符串中的字符位置。所以,原型(prototype)大概应该是:

function SAAT_YTagSelect(pHandle: Pointer; nOpEnable, nMatchType: Byte; MatchData: PByte; nLenth: Byte): Boolean; stdcall;

调用应该是这样的:

procedure TForm5.Button4Click(Sender: TObject);
var
    hp: Pointer;
    b: Byte;
    data: PAnsiChar;
begin
    // set hp appropriately first
    b := 1 or 2; // Bitwise OR the values of each set bit
    data := '84500080';
    if SAAT_YTagSelect(hp, b, 1, PByte(data), 8) then
        StatusBar1.Panels[1].Text := 'Tag Selected';
end;

此外,您还没有将 hp 指向任何东西,这可能是一个问题,具体取决于它的用途。

关于c - 如何使用正确的变量值在 Delphi 中调用 dll C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26835386/

相关文章:

c# - 安装 .NET COM+ dll

c - 使用shell脚本打印c文件中的函数名称?

c - 从 C 文件中删除最后一行 - 创建空行

delphi - 元类默认参数值 (Delphi 2009)

c++ - 如何从自定义 ODBC 驱动程序创建 DSN?

c#在一个目录下使用不同版本的dll

c - 在 Windows 或 Linux 上为 Raspberry Pi 构建 C 可执行文件

c - 关于参数化查询的单行查询结果

delphi - E2010 不兼容类型 : 'string' and 'PWideChar'

arrays - 如何在 Delphi 中正确地转换和传递参数