Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.05.2011, 16:41
LexaL LexaL вне форума
Прохожий
 
Регистрация: 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);
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter