<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="skins/JinnStyleV1/article.xslt"?><blog view="689822" processed="0.129" queries="8" focusMarkup="" xslt="skins/JinnStyleV1/article.xslt"><panels><panel id="1" sn="0" sys="true"><name>Blog Main</name><content><article id="103" disComm="false"><title>通过 JNI 让 JAVA 与 Delphi 程序交互[5]</title><category id="20"><name>学习随笔</name><icon>images/icons/3.gif</icon></category><content><![CDATA[&#20043;&#21069;,&#25105;&#20204;&#23398;&#20102;&#22914;&#20309;&#29992; Java &#35843;&#29992; Delphi &#31243;&#24207;&#30340;&#19968;&#20010;&#26041;&#27861;<br />&#22914;&#26524;&#22312;Delphi &#31243;&#24207;&#22312;&#36866;&#24403;&#26102;&#20505;&#38656;&#35201;&#35843;&#29992; Java &#31243;&#24207;,&#21448;&#35201;&#24590;&#20040;&#20570;&#21602;?<br /><br />&#39318;&#20808;,&#25105;&#20204;&#20808;&#23450;&#20041;&#22914;&#19979;&#30340; Java &#31867;:<br /><textarea name='code' class='js' cols='50'>package alvinJNI;

class HelloWorld {
        static {
                System.loadLibrary(&quot;DelphiAction&quot;);
        }
        String str = &quot;&#20320;&#22909;&quot;;
        
        public native void callPrintText(HelloWorld hw);

        public void printText(String arg) {
                System.out.println(arg);
        }
        
        public static void main(String[] args) {
                HelloWorld hw = new HelloWorld();
                hw.callPrintText(hw);
        }

}</textarea><br /><br />&#25105;&#20204;&#20877;&#20687;&#19978;&#27425;&#19968;&#26679;&#22312; Delphi &#20013;&#24314;&#31435; DLL &#24037;&#31243;,&#20889;&#19979;&#38754;&#30340;&#20195;&#30721;(&#26377;&#27880;&#37322;):<br /><textarea name='code' class='delphi' cols='50'>library DelphiAction;

uses
  JNI;

//&#20170;&#22825;&#30340;&#36825;&#20010;&#31243;&#24207;&#31245;&#24494;&#30340;&#22797;&#26434;&#19968;&#28857;,&#22240;&#20026;&#35201;&#35843;&#29992; Java &#23545;&#35937;&#30340;&#26041;&#27861;,&#22312;&#36825;&#37324;&#21487;&#20197;&#23398;&#21040;&#23545; JObject &#30340;&#25805;&#20316;
procedure Java_alvinJNI_HelloWorld_callPrintText(PEnv: PJNIEnv; Obj: JObject; arg: JObject); stdcall;
var
  JVM: TJNIEnv;
  c: JClass;  //&#31867;ID
  fid: JFieldID;  //&#23646;&#24615;ID
  mid: JMethodID;  //&#26041;&#27861;ID
  tmpStr: JString;
  javaargs : array[0..0] of JValue; //&#35843;&#29992;&#26041;&#27861;&#26102;&#30340;&#21442;&#25968;
begin
  JVM := TJNIEnv.Create(PEnv);

  {&#25105;&#20204;&#20808;&#26469;&#30475;&#19979;&#22914;&#20309;&#33719;&#24471;&#19968;&#20010;&#23545;&#35937;&#30340;&#26576;&#20010;&#23646;&#24615;&#20540;}
  {----------------------------------------}
  {&#25105;&#20204;&#23545; Java &#23545;&#35937;&#30340;&#25805;&#20316;&#35201;&#36873;&#33719;&#21462;&#36825;&#20010;&#23545;&#35937;&#30340; ClassID,&#25105;&#20204;&#21487;&#20197;&#29992;&#19979;&#38754;&#30340;&#26041;&#27861;&#26469;&#21462;&#24471;.}
  c := JVM.GetObjectClass(arg);

  {&#25105;&#20204;&#20808;&#26469;&#33719;&#21462;&#21442;&#25968; HelloWorld arg &#23545;&#35937;&#30340; String str &#36825;&#20010;&#23646;&#24615;&#30340;&#20540;
   &#36825;&#37324;&#25105;&#20204;&#20808;&#35201;&#33719;&#24471;&#36825;&#20010;&#23646;&#24615;&#22312;&#23427;&#25152;&#22312;&#31867;&#20013;&#30340;&#23646;&#24615; ID }
  fid := JVM.GetFieldID(c, 'str', 'Ljava/lang/String;');
  {&#19978;&#38754;&#35843;&#29992;&#30340;&#36825;&#20010;&#26041;&#27861;&#20013;&#30340;&#21442;&#25968;&#20998;&#21035;&#26159;: &#25152;&#23646;&#31867;ID, &#23646;&#24615;&#21517;, &#23646;&#24615;&#31867;&#22411;&#31614;&#21517;
   &#20851;&#20110;&#23646;&#24615;&#31867;&#22411;&#30340;&#31614;&#21517;,&#23558;&#22312;&#19979;&#38754; '&#35828;&#26126;1' &#32473;&#20986;}

  {&#19979;&#38754;,&#25105;&#20204;&#23601;&#21487;&#20197;&#26681;&#25454; &#23646;&#24615;ID &#26469;&#33719;&#21462;&#23646;&#24615;&#20540;&#20102;, &#36825;&#37324;&#25105;&#20204;&#20250;&#21462;&#24471;&#21040; arg.str &#36825;&#20010;&#23383;&#31526;&#20018;}
  tmpStr := JVM.GetObjectField(arg, fid);
  {&#19978;&#38754;&#30340;&#36825;&#20010; JVM.GetObjectField(arg, fid) &#29992;&#26469;&#33719;&#21462;&#23646;&#24615;&#20540;
   &#21442;&#25968;&#20998;&#21035;&#26159;: &#35201;&#21462;&#24471;&#20854;&#23646;&#24615;&#30340;&#23545;&#35937;, &#35201;&#21462;&#24471;&#30340;&#23646;&#24615;&#30340;&#23646;&#24615;ID
   &#36825;&#37324;&#21462;&#24471;&#30340;&#26159;&#19968;&#20010; Java &#30340; String &#23545;&#35937;,&#26159; JString,&#20854;&#23454;&#23427;&#20063;&#23601;&#26159; JObject &#31867;&#22411;&#30340;}
  writeln('Delphi &#36755;&#20986;&#30340;: ' + JVM.UnicodeJStringToString(tmpStr));




  {&#25105;&#20204;&#20877;&#26469;&#30475;&#19979;&#22914;&#20309;&#35843;&#29992;&#19968;&#20010; JObject &#30340;&#26041;&#27861;, &#36825;&#37324;&#25105;&#20204;&#35201;&#35843;&#29992;&#30340;&#26159; arg.printText() &#36825;&#20010;&#26041;&#27861;}
  {------------------------------------------------------------------------------------}
  //&#25105;&#20204;&#36824;&#26159;&#35201;&#29992;&#21040;&#19978;&#38754;&#30340;&#37027;&#20010; &#31867;ID: c.
  //&#36825;&#19968;&#27425;&#25105;&#20204;&#35201;&#21462;&#24471;&#36825;&#20010;&#26041;&#27861;&#30340; &#26041;&#27861;ID
  mid := JVM.GetMethodID(c, 'printText', '(Ljava/lang/String;)V');
  //&#19978;&#38754;&#35843;&#29992;&#30340;&#36825;&#20010;&#26041;&#27861;&#20013;&#30340;&#21442;&#25968;&#20998;&#21035;&#26159;: &#25152;&#23646;&#31867;ID, &#26041;&#27861;&#21517;, &#26041;&#27861;(&#21442;&#25968;+&#36820;&#22238;&#20540;)&#31867;&#22411;&#31614;&#21517;
  //&#20851;&#20110;&#26041;&#27861;(&#21442;&#25968;+&#36820;&#22238;&#20540;)&#31867;&#22411;&#30340;&#31614;&#21517;,&#23558;&#22312;&#19979;&#38754; '&#35828;&#26126;2' &#32473;&#20986;

  //&#26377;&#20102; &#26041;&#27861;ID &#21518;&#25105;&#20204;&#23601;&#21487;&#20197;&#29992;&#36825;&#20010;ID&#26469;&#35843;&#29992;&#36825;&#20010;&#26041;&#27861;&#20102;,&#25105;&#20204;&#36825;&#37324;&#35201;&#35843;&#29992;&#30340;&#26041;&#27861;&#26159;: arg.printText(&#21442;&#25968;);
  //&#22240;&#20026;&#25105;&#20204;&#35201;&#35843;&#29992;&#30340;&#36825;&#20010;&#26041;&#27861;&#26377;&#21442;&#25968;, &#35843;&#29992; Java &#26041;&#27861;&#30340;&#26102;&#20505;&#22914;&#26524;&#26377;&#21442;&#25968;,&#35201;&#24314;&#31435;&#21442;&#25968;&#25968;&#32452;,&#36825;&#37324;&#25105;&#20204;&#23601;&#26469;&#24314;&#31435;&#25968;&#32452;
  javaargs[0].l := tmpStr;
  {&#36825;&#37324;&#36825;&#20010; javaargs &#26159; JValue &#31867;&#22411;. &#23427;&#26377;&#28857;&#29305;&#27530;,&#23427;&#30340;&#29992;&#27861;&#22312;&#19979;&#38754; &#35828;&#26126;3 &#32473;&#20986;}

  {&#26377;&#20102; &#31867;&#35937;, &#26041;&#27861;ID, &#21442;&#25968;. &#19979;&#38754;&#25105;&#20204;&#23601;&#21487;&#20197;&#35843;&#29992; arg.printText(javaargs) &#36825;&#20010;&#26041;&#27861;&#20102;,&#20351;&#29992;&#19979;&#38754;&#36825;&#20010;&#26041;&#27861;&#23601;&#21487;&#23454;&#29616;}
  JVM.CallObjectMethodA(arg, mid, @javaargs);

  JVM.Free;
end;

exports
        Java_alvinJNI_HelloWorld_callPrintText;
end.</textarea><br /><br />&#21040;&#36825;&#37324;,&#25105;&#20204;&#24050;&#32463;&#21487;&#20197;&#20174; Delphi &#20013;&#33719;&#24471; Java &#23545;&#35937;&#30340;&#23646;&#24615;&#20102;, &#36824;&#21487;&#20197;&#35843;&#29992;&#19968;&#20010; Java &#23545;&#35937;&#30340;&#26041;&#27861;,&#26159;&#19981;&#26159;&#24456;&#37239;&#21602;?<br />&#20320;&#23398;&#21040;&#20102;&#27809;?<br /><br /><br />###########################&#35828;&#26126;1###############################<br />&#29616;&#22312;,&#25105;&#20204;&#36824;&#35201;&#20877;&#20102;&#35299;&#19968;&#20010;&#33719;&#21462; &quot;&#23646;&#24615;ID&quot; &#26102;&#30340;&#37027;&#20010;&#31614;&#21517;<br />&#19978;&#38754;&#20363;&#23376;&#20013;: fid := JVM.GetFieldID(c, 'str', 'Ljava/lang/String;'); &#29992;&#30340;&#31614;&#21517;&#26159;: 'Ljava/lang/String;'<br />&#22240;&#20026;&#21018;&#21018;&#35201;&#33719;&#24471;&#30340;&#23646;&#24615;&#26159; java.lang.String &#31867;&#22411;&#30340;,&#25152;&#20197;&#23427;&#30340;&#31614;&#21517;&#26159;: 'Ljava/lang/String;'<br />&#22914;&#26524;,&#25105;&#20204;&#35201;&#33719;&#24471;&#30340;&#23646;&#24615;&#26159;&#20854;&#23427;&#31867;&#22411;,&#33719;&#21462; &#23646;&#24615;ID &#26102;&#21448;&#35201;&#24590;&#26679;&#31614;&#21517;&#21602;?&#19979;&#38754;&#32473;&#20986;&#19968;&#20010;&#23545;&#29031;&#34920;<br /><br />byte -- B<br />char --- C<br />double -- D<br />float -- F<br />int -- I<br />long -- J (&#27880;&#24847;&#65306;&#26159;J&#19981;&#26159;L)<br />short -- S<br />void -- V<br />boolean - Z&#65288;&#27880;&#24847;&#65306;&#26159;Z&#19981;&#26159;B&#65289;<br />class(&#31867;&#23545;&#35937;&#31867;&#22411;) - 'L'+&#23436;&#25972;&#31867;&#21517;+';'　(&#21253;&#36335;&#24452;&#20998;&#38548;&#31526;&#20026;: '/'.　 &#22914;&#19978;&#38754;&#20363;&#23376;&#20013;&#30340; String &#23545;&#22411;, &#31614;&#21517;&#20026;: 'Ljava/lang/String;')<br /><br />&#25968;&#32452; type[] -- '['+type (&#20363;&#22914; float[] &#30340;&#31614;&#21517;&#23601;&#26159; '[float')<br />(&#22914;&#26524;&#26159;&#20108;&#32500;&#25968;&#32452;&#65292;&#22914;float[][]&#65292;&#21017;&#31614;&#21517;&#20026; '[[float')<br /><br /><br />############################&#35828;&#26126;2###############################<br />&#29616;&#22312;,&#25105;&#20204;&#36824;&#35201;&#20877;&#20102;&#35299;&#19968;&#20010;&#33719;&#21462; &quot;&#26041;&#27861;ID&quot; &#26102;&#30340;&#37027;&#20010;&#31614;&#21517;<br />&#19978;&#38754;&#20363;&#23376;&#20013;: mid := JVM.GetMethodID(c, 'printText', '(Ljava/lang/String;)V'); &#29992;&#30340;&#31614;&#21517;&#26159;: '(Ljava/lang/String;)V'<br />&#26041;&#27861;ID &#30340;&#31614;&#21517;,&#20998;&#20026;&#20004;&#37096;&#20998;<br />&#19968;&#37096;&#20998;&#26159;&#21069;&#38754;&#25324;&#21495;&#20013;&#30340;,&#26159;&#21442;&#25968;&#31867;&#22411;&#30340;&#31614;&#21517;<br />&#21478;&#19968;&#37096;&#20998;&#26159;&#25324;&#21495;&#21518;&#30340;,&#26159;&#36820;&#22238;&#20540;&#31867;&#22411;&#30340;&#31614;&#21517;<br />&#20854;&#20013;&#26576;&#20010;&#31614;&#25968;&#19982;&#36820;&#22238;&#20540;&#30340;&#31867;&#22411;&#31614;&#21517;&#19982;&#33719;&#21462;&#23646;&#24615;ID&#26102;&#30340;&#31614;&#21517;&#26159;&#19968;&#26679;&#30340;<br />&#19978;&#38754;&#35201;&#35843;&#29992;&#30340;&#26041;&#27861;&#21482;&#26377;&#19968;&#20010;&#21442;&#25968;,&#22914;&#26524;&#26377;&#22810;&#20010;&#21442;&#25968;&#26102;&#21448;&#24590;&#26679;&#21602;?<br /><br />&#22914;: int getInt(long a, double b); &#36825;&#26679;&#30340; Java &#26041;&#27861;&#35201;&#36825;&#26679;&#31614;&#21517;: '(JD)I'<br />(&#27880;&#24847;:&#21442;&#25968;&#31614;&#21517;&#26159;&#36830;&#32493;&#30340;,&#27809;&#26377;&#20998;&#38548;&#31526;, &#36825;&#37324;&#31532;&#19968;&#20010;&#21442;&#25968; long &#31614;&#21517;&#20026;:J, &#31532;&#20108;&#20010;&#21442;&#25968;&#31614;&#21517;&#20026;: D, &#36820;&#22238;&#20540;&#31867;&#22411; int &#31614;&#21517;&#20026;: I)<br />&#35828;&#21040;&#36825;&#37324;,&#30456;&#20449;&#22823;&#23478;&#37117;&#20250;&#20351;&#29992;&#36825;&#20010;&#31614;&#21517;&#20102;<br /><br /><br />############################&#35828;&#26126;3###############################<br />&#22312;&#35843;&#29992;&#19968;&#20010; Java &#26041;&#27861;&#26102;, &#22914;&#26524;&#36825;&#20010;&#26041;&#27861;&#26377;&#21442;&#25968;, &#25105;&#20204;&#23601;&#35201;&#20256;&#36882;&#19968;&#20010;&#21442;&#25968;&#25968;&#32452;&#30340;&#22320;&#22336;&#32473; Java<br />&#29616;&#22312;,&#25105;&#20204;&#36824;&#35201;&#20877;&#20102;&#35299;&#22914;&#20309;&#21019;&#24314;&#36825;&#26679;&#30340;&#19968;&#20010;&#21442;&#25968;&#25968;&#32452;<br />&#20256;&#36882;&#32473; Java &#26041;&#27861;&#30340;&#21442;&#25968;,&#31867;&#22411;&#22343;&#20026; JValue. &#23427;&#26159;&#19968;&#20010;packed record<br /><br /><br />&#22914;&#26524;,&#25105;&#20204;&#35201;&#35843;&#29992;&#30340;&#26041;&#27861; void myMethod(int a, long b, String c); &#26377; 3 &#20010;&#21442;&#25968;<br />&#37027;&#20040;<br />1.&#25105;&#20204;&#20808;&#35201;&#22768;&#26126;&#22914;&#19979;&#25968;&#32452;:<br />var<br />　args : array[0..1] of JValue;<br />2.&#32473;&#25968;&#32452;&#36171;&#20540;<br />　args[0].i := 100;<br />　args[1].j := 100;<br />　args[2].l := JVM.StringToJString(pchar(UTF8Encode('&#38597;&#26519;&#32593;&#32476; http://zmzx.icpcn.com')));<br />3.&#35843;&#29992;<br />　JVM.CallVoidMethodA(Java&#23545;&#35937;, &#26041;&#27861;ID, @args);<br /><br />JValue &#26159;&#19968;&#20010; packed record,&#23427;&#30340;&#23450;&#20041;&#22914;&#19979;:<br />　JValue = packed record<br />　case Integer of<br />　　0: (z: JBoolean);<br />　　1: (b: JByte　 );<br />　　2: (c: JChar　 );<br />　　3: (s: JShort　);<br />　　4: (i: JInt　　);<br />　　5: (j: JLong　 );<br />　　6: (f: JFloat　);<br />　　7: (d: JDouble );<br />　　8: (l: JObject );<br />　end;<br /><br />&#35843;&#29992;&#26041;&#27861;&#26102;,TJNIEnv &#36824;&#26377;:<br />　　CallObjectMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JObject; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallBooleanMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JBoolean; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallByteMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JByte; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallCharMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JChar; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallShortMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JShort; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallIntMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JInt; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallLongMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JLong; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallFloatMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JFloat; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallDoubleMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JDouble; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallVoidMethodA: procedure(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue); {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallNonvirtualObjectMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JObject; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallNonvirtualBooleanMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JBoolean; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallNonvirtualByteMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JByte; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallNonvirtualCharMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JChar; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallNonvirtualShortMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JShort; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallNonvirtualIntMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JInt; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallNonvirtualLongMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JLong; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallNonvirtualFloatMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JFloat; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallNonvirtualDoubleMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JDouble; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br />　　CallNonvirtualVoidMethodA: procedure(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue); {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}<br /><br /><br />&#22909;&#20102;,&#21040;&#36825;&#37324;,&#30456;&#20449;&#22823;&#23478;&#23545;&#20570; Delphi &#30340; JNI &#24050;&#26377;&#19968;&#23450;&#30340;&#20102;&#35299;<br />&#20851;&#20110; Delphi JNI &#30340;&#35805;&#39064;&#23601;&#20808;&#35828;&#21040;&#36825;&#37324;<br />&#22914;&#26524;&#26377;&#20852;&#36259;,&#22823;&#23478;&#21487;&#20197;&#25171;&#24320; jni.pas &#20102;&#35299;&#26356;&#22810;]]></content><publish>2007-06-14 22:29:05</publish><update>2007-09-10 00:56:00</update><comment>0</comment><view>2532</view></article><comments/><previous id="102"><title>通过 JNI 让 JAVA 与 Delphi 程序交互[4]</title></previous><next id="104"><title>[推荐]Delphi 调用 Java</title></next></content></panel></panels><modules><module id="4" sn="3" sys="true"><name>Category</name><title>日志分类</title></module><module id="6" sn="4" sys="true"><name>Archive</name><title>日志归档</title></module><module id="5" sn="5" sys="true"><name>User Panel</name><title>控制面板</title></module><module id="10" sn="6" sys="true"><name>Recent Article</name><title>最新日志</title></module><module id="8" sn="7" sys="true"><name>Search</name><title>查询搜索</title></module><module id="7" sn="8" sys="true"><name>Recent Comments</name><title>最新评论</title></module><module id="2" sn="9" sys="true"><name>Statistics</name><title>统计信息</title></module></modules><user><usn></usn><status>3</status><login>false</login></user></blog>
