|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Правильно ли написана процедура для 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); |