将String数组值从Java本机接口传递到Delphi包装类

时间:2014-02-10 12:27:28

标签: delphi java-native-interface

我试图将String数组值从Java本机接口传递给Delphi包装器类。 但没有从JNI获得任何数组值。如何在Delphi Wrapper类中声明Array String。 如何转换JNI String数组。

这是我的Delphi包装类Code:

function Java_com_erm_controller_ARMReports_A3(PEnv: PJNIEnv; Obj: JObject;
  ex_BSName_ALM: JStrings): Integer; stdcall; export;
var
  objRpt: TARMReports;
begin
  Result := objRpt.A3(aBSName_ALM);
  JVM.Free;
  objRpt.Free;
end;

1 个答案:

答案 0 :(得分:0)

在不知道实际声明为JStrings的情况下(它没有在Delphi的JNI包装单元中定义),我只能猜测你需要做这样的事情:

function Java_com_erm_controller_ARMReports_A3(PEnv: PJNIEnv; Obj: JObject;
  ex_BSName_ALM: JStrings): Integer; stdcall; export;
var
  strs: array of String;
  len, i: Integer;
  el: JNIObject;
  ...
begin
  ...
  len := PEnv.GetArrayLength(PEnv, ex_BSName_ALM);
  SetLength(strs, len);
  for i := 0 to len-1 do
  begin
    el := PEnv.GetObjectArrayElement(PEnv, ex_BSName_ALM, i);
    strs[i] := JStringToString(JString(el));
  end;
  ...
end;