Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2011, 16:43   #1
LexaL
Пользователь
 
Регистрация: 24.10.2010
Сообщений: 12
По умолчанию Правильно ли написана процедура для 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);
LexaL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пороверте правильно написана программа? Pchelka1992 Помощь студентам 0 05.04.2011 17:49
Программа правильно написана? Delphi boss89 Помощь студентам 9 26.10.2010 03:43
Правильно ли написана программа в С Денис999 Помощь студентам 1 30.05.2010 17:21
Правильно ли написана програма (с++) ? Alex1991 Помощь студентам 1 28.03.2009 15:52
Посмотрите пожалуйста правильно ли написана программа,если нет укажите ошибку. Викулька Помощь студентам 1 10.12.2007 22:49