如何使用正确的变量值在Delphi中调用dll C函数?
我已将以下内容从“RFIDAPI.dll”C函数转换为Delphi:如何使用正确的变量值在Delphi中调用dll C函数?,c,delphi,dll,C,Delphi,Dll,我已将以下内容从“RFIDAPI.dll”C函数转换为Delphi: bool SAAT_YTagSelect( void *pHandle, unsigned char nOpEnable, unsigned char nMatchType, unsigned char *MatchData, unsigned
bool SAAT_YTagSelect( void *pHandle,
unsigned char nOpEnable,
unsigned char nMatchType,
unsigned char *MatchData,
unsigned char nLenth )
到
函数SAAT_YTagSelect(幻影:指针;
不允许,
nMatchType,
匹配数据,
nLenth:泛六边形):布尔型;stdcall;
我试图调用该函数,但遇到访问冲突。显然,我没有为nOpEnable 1Byte变量指定正确的值
可变NOP启用蜂鸣器或LED启用(1字节):
无符号字符
参数是1字节整数类型,而不是字符串。。。因此它们对应于Delphi的字节
,而不是PAnsiChar
。每个蜂鸣器/LED的数字是要在该字节中设置的位位置,而不是字符串中的字符位置。因此,原型应该是:
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;
此外,您还没有指出任何问题,这可能取决于它的用途。
无符号字符
参数是1字节整数类型,而不是字符串。。。因此它们对应于Delphi的字节
,而不是PAnsiChar
。每个蜂鸣器/LED的数字是要在该字节中设置的位位置,而不是字符串中的字符位置。因此,原型应该是:
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;
此外,您还没有指出任何问题,这可能取决于它的用途。
无符号字符
参数是1字节整数类型,而不是字符串。。。因此它们对应于Delphi的字节
,而不是PAnsiChar
。每个蜂鸣器/LED的数字是要在该字节中设置的位位置,而不是字符串中的字符位置。因此,原型应该是:
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;
此外,您还没有指出任何问题,这可能取决于它的用途。
无符号字符
参数是1字节整数类型,而不是字符串。。。因此它们对应于Delphi的字节
,而不是PAnsiChar
。每个蜂鸣器/LED的数字是要在该字节中设置的位位置,而不是字符串中的字符位置。因此,原型应该是:
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;
此外,您还没有指出任何问题,这可能是一个问题,取决于它的用途。函数签名的正确翻译是:
function SAAT_YTagSelect(pHandle: Pointer; nOpEnable, nMatchType: Byte; MatchData: PByte; nLenth: Byte): Boolean; stdcall;
用法如下所示:
var
hp: Pointer;
b: Byte;
Data: PAnsiChar;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data := '84500080';
if SAAT_YTagSelect(hp, b, 1, PByte(data), 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
var
hp: Pointer;
b: Byte;
Data: array[0..7] of Byte;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data[0] := 8;
data[1] := 4;
data[2] := 5;
data[3] := 0;
data[4] := 0;
data[5] := 0;
data[6] := 8;
data[7] := 0;
if SAAT_YTagSelect(hp, b, $01, @data[0], 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
我找不到有关SAAT_YTagSelect()
函数的任何文档,因此很难确切地知道MatchData
参数需要什么。考虑到您有使用字符串作为数值参数的习惯,它甚至可能更像这样:
var
hp: Pointer;
b: Byte;
Data: PAnsiChar;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data := '84500080';
if SAAT_YTagSelect(hp, b, 1, PByte(data), 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
var
hp: Pointer;
b: Byte;
Data: array[0..7] of Byte;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data[0] := 8;
data[1] := 4;
data[2] := 5;
data[3] := 0;
data[4] := 0;
data[5] := 0;
data[6] := 8;
data[7] := 0;
if SAAT_YTagSelect(hp, b, $01, @data[0], 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
函数签名的正确翻译为:
function SAAT_YTagSelect(pHandle: Pointer; nOpEnable, nMatchType: Byte; MatchData: PByte; nLenth: Byte): Boolean; stdcall;
用法如下所示:
var
hp: Pointer;
b: Byte;
Data: PAnsiChar;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data := '84500080';
if SAAT_YTagSelect(hp, b, 1, PByte(data), 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
var
hp: Pointer;
b: Byte;
Data: array[0..7] of Byte;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data[0] := 8;
data[1] := 4;
data[2] := 5;
data[3] := 0;
data[4] := 0;
data[5] := 0;
data[6] := 8;
data[7] := 0;
if SAAT_YTagSelect(hp, b, $01, @data[0], 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
我找不到有关SAAT_YTagSelect()
函数的任何文档,因此很难确切地知道MatchData
参数需要什么。考虑到您有使用字符串作为数值参数的习惯,它甚至可能更像这样:
var
hp: Pointer;
b: Byte;
Data: PAnsiChar;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data := '84500080';
if SAAT_YTagSelect(hp, b, 1, PByte(data), 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
var
hp: Pointer;
b: Byte;
Data: array[0..7] of Byte;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data[0] := 8;
data[1] := 4;
data[2] := 5;
data[3] := 0;
data[4] := 0;
data[5] := 0;
data[6] := 8;
data[7] := 0;
if SAAT_YTagSelect(hp, b, $01, @data[0], 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
函数签名的正确翻译为:
function SAAT_YTagSelect(pHandle: Pointer; nOpEnable, nMatchType: Byte; MatchData: PByte; nLenth: Byte): Boolean; stdcall;
用法如下所示:
var
hp: Pointer;
b: Byte;
Data: PAnsiChar;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data := '84500080';
if SAAT_YTagSelect(hp, b, 1, PByte(data), 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
var
hp: Pointer;
b: Byte;
Data: array[0..7] of Byte;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data[0] := 8;
data[1] := 4;
data[2] := 5;
data[3] := 0;
data[4] := 0;
data[5] := 0;
data[6] := 8;
data[7] := 0;
if SAAT_YTagSelect(hp, b, $01, @data[0], 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
我找不到有关SAAT_YTagSelect()
函数的任何文档,因此很难确切地知道MatchData
参数需要什么。考虑到您有使用字符串作为数值参数的习惯,它甚至可能更像这样:
var
hp: Pointer;
b: Byte;
Data: PAnsiChar;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data := '84500080';
if SAAT_YTagSelect(hp, b, 1, PByte(data), 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
var
hp: Pointer;
b: Byte;
Data: array[0..7] of Byte;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data[0] := 8;
data[1] := 4;
data[2] := 5;
data[3] := 0;
data[4] := 0;
data[5] := 0;
data[6] := 8;
data[7] := 0;
if SAAT_YTagSelect(hp, b, $01, @data[0], 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
函数签名的正确翻译为:
function SAAT_YTagSelect(pHandle: Pointer; nOpEnable, nMatchType: Byte; MatchData: PByte; nLenth: Byte): Boolean; stdcall;
用法如下所示:
var
hp: Pointer;
b: Byte;
Data: PAnsiChar;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data := '84500080';
if SAAT_YTagSelect(hp, b, 1, PByte(data), 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
var
hp: Pointer;
b: Byte;
Data: array[0..7] of Byte;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data[0] := 8;
data[1] := 4;
data[2] := 5;
data[3] := 0;
data[4] := 0;
data[5] := 0;
data[6] := 8;
data[7] := 0;
if SAAT_YTagSelect(hp, b, $01, @data[0], 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
我找不到有关SAAT_YTagSelect()
函数的任何文档,因此很难确切地知道MatchData
参数需要什么。考虑到您有使用字符串作为数值参数的习惯,它甚至可能更像这样:
var
hp: Pointer;
b: Byte;
Data: PAnsiChar;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data := '84500080';
if SAAT_YTagSelect(hp, b, 1, PByte(data), 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
var
hp: Pointer;
b: Byte;
Data: array[0..7] of Byte;
begin
SAAT_TCPInit(hp, '192.168.0.238', 7086);
SAAT_Open(hp);
...
b := 1 or 2;
data[0] := 8;
data[1] := 4;
data[2] := 5;
data[3] := 0;
data[4] := 0;
data[5] := 0;
data[6] := 8;
data[7] := 0;
if SAAT_YTagSelect(hp, b, $01, @data[0], 8) then
StatusBar1.Panels[1].Text := 'Tag Selected';
...
SAAT_Close(hp);
end;
我相信你是在要求c函数:bool SAAT_YTagSelect(void*pHandle,unsignedchar nOpEnable,unsigned char nMatchType,unsigned char*MatchData,unsigned char nLenth)你读过了吗:FWIW,
char*
是指向c中8位字符的指针,因此可以翻译成PAnsiChar
。该名称中的P
代表指针。所以你通常会把char
翻译成AnsiChar
,而不是PAnsiChar
(很大的区别!)。但是,字符也可以按一个字节来表示,在C语言中,尤其是当它用作无符号字符时。因此,无符号字符
的正确翻译在大多数情况下是,字节
。您应该真正阅读David提到的文章。我慢慢地开始明白大卫关于你不想学习的观点。在过去,他们常常称这样的人为a。我确实读过这篇文章,是的,我正在努力学习,尽管伊芙不是c#开发者。现在,我只想学习基础知识。我相信你要求的是c函数:bool SAAT_YTagSelect(void*pHandle,unsignedchar nOpEnable,unsigned char nMatchType,unsigned char*MatchData,unsigned char nLenth)你读过了吗:FWIW,char*
是指向c中8位字符的指针,因此,它可以翻译为PAnsiChar
。该名称中的P
代表指针。所以你通常会把char
翻译成AnsiChar
,而不是PAnsiChar
(很大的区别!)。但是,字符也可以按一个字节来表示,在C语言中,尤其是当它用作无符号字符时。因此,无符号字符
的正确翻译在大多数情况下是,字节
。您应该真正阅读David提到的文章。我慢慢地开始发疯了