04.05.2011, 16:41
|
Прохожий
|
|
Регистрация: 24.10.2010
Сообщения: 25
Репутация: 10
|
|
Правильно ли написана процедура для Java native метода?
Вот код процедуры.
Код:
library LoadLanImpl;
uses
Windows,SysUtils,Classes,JNI;
type
LAN_Header=record
HDWORD:array[0..5] of byte;
IPACK:word;
NBANDS:word;
unused1:array[0..5] of byte;
ICOLS:integer;
IROWS:integer;
XSTART,YSTART:integer;
unused2:array[0..55] of byte;
MAPTYP,NCLASS:word;
unused3:array[0..13] of byte;
IAUTYP:word;
ACRE,XMAP,YMAP,XCELL,YCELL:single;
end;
type mas=array of array of array of JShort;
procedure Java_createhypertables_LoadLAN_displayMass(PEnv: PJNIEnv; Obj: JObject; value: JString; var data:mas); {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
var FData:file;
Header:LAN_HEADER;
buf:smallint;
i,j,k:integer;
nCols,nRows,nBands:integer;
flLoadData:boolean;
value1:WideString;
begin
value1:=JNI_JStringToWideString(PEnv, value);
try
AssignFile(FData,value1);
Filemode:=fmOpenread;
Reset(FData,1);
BlockRead(FData,Header,sizeof(Header));
Setlength(data,Header.IROWS,Header.ICOLS,Header.NBANDS);
nRows:=Header.IROWS;
nCols:=Header.ICOLS;
nBands:=Header.NBANDS;
for i:=0 to Header.IROWS-1 do
for k:=0 to Header.NBANDS-1 do
for j:=0 to Header.ICOLS-1 do
begin
BlockRead(FData,buf,2);
data[i,j,k]:=buf;
end;
flLoadData:=true;
finally
CloseFile(FData);
end;
end;
exports Java_createhypertables_LoadLAN_displayMass;
end.
Сам native метод:
Код:
public native short[][][] displayMass(String value);
static
{
System.loadLibrary("LoadLanImpl");
}
И его вызов:
Код:
String value = "F:/ImageTest.lan";
short[][][] sh = new short[172][111][242];
sh = ll.displayMass(value);
|