【发布时间】:2015-07-21 16:49:05
【问题描述】:
我需要用 Delphi DLL 开发一个 Java 程序,但是有一个问题是:
我在JNA中映射如下:
- Delphi 函数:
function send_command (const command : byte; var size : byte; var data : pbyte) : integer; stdcall external 'comunication.dll';
- Java 函数:
public int send_command(byte command, ByteByReference size, PointerByReference data);
函数返回 1(成功结果),但我无法获取 data 变量中的值。
如何获取 data 中的值?
在Delphi测试程序中,函数调用如下:
const
cmdREAD_STATUS = $17;
procedure TForm1.ReadStatus1Click(Sender: TObject);
var
Data,
p : pbyte;
tam : byte;
i,
result: integer;
saux : string;
begin
getmem (Data, 40);
tam:= 0;
result:= send_comand (cmdREAD_STATUS, tam, Data);
if result= 1 then
begin
memo1.Lines.add ('Command OK');
i:= 0;
sAux:= '';
p:= Data;
while (i < Tam) do
begin
sAux:= sAux + inttohex (p^, 2)+' ';
if length (sAux) > 59 then
begin
memo1.Lines.add (SAux);
sAux:= '';
end;
inc (p);
inc (i);
end;
if sAux <> '' then
memo1.Lines.add (SAux);
end
else
memo1.Lines.add ('Result: '+inttostr(result)+' in command execution');
freemem (Data);
end;
【问题讨论】:
-
“无法获取数据变量中的值”是什么意思?
-
这个DLL与设备对话,这个函数返回一个字节数组,在Delphi中返回作为测试软件的例子。
-
我仍然建议修复 delphi 代码
-
@DavidHeffernan,改变变量? byte 到 BYTE 和 pbyte 到 PBYTE ?
-
什么代码不能正常工作?填充
data的Delphi 代码,还是尝试从data读取的Java 代码?你需要更具体。