📄 delphiaction.dpr
字号:
library DelphiAction;
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses
JNI in 'JNI.pas',
test in 'test.pas' {frmtest};
{$R *.res}
//下面我们来写一个函数,就是为 刚才 JAVA 类实现一个简单的方法
//因为要让 JAVA 能够调用到这个函数,所以这个函数的命名是非常讲究的,名称各段的分隔符是 _ 下划线
//本例的函数如下: 即 Java_包名_类名_类中的方法名
//函数必须设置为 stdcall
procedure Java_alvinJNI_HelloWorld_printText(PEnv: PJNIEnv; Obj: JObject;
str: JString; i: JInt; strArray: JObjectArray); stdcall;
//这回我们需要用到一个 TJNIEnv 对象,我们来声明
var
JVM: TJNIEnv;
tmpStr: String;
tmpInt, len, k: Integer;
jobj: JObject;
begin
Writeln('您好!看到效果了吧。 - DELPHI');
//实例化 JVM, 这个对象可以看成是 Java 的虚拟机.(自己的理解)
JVM := TJNIEnv.Create(PEnv);
//参数提交过来的字符串,实际上是一个 JString 对象,我们在这里要用 JVM 来转化它.
//我们调用 JVM 的 UnicodeJStringToString 函数就可以实现 JString 到 String 的转化了.
tmpStr := JVM.UnicodeJStringToString(str);
Writeln(tmpStr);
//参数提交过来的 int 型数据,在这里是一个 JInt 数据,它其实就是一个 Integer 数据,它的使用更加方便
//它可以直接地参与 Interger 类型数据的运算,是不是很容易.
tmpInt := i + 1000;
tmpInt := tmpInt - 100;
Writeln(tmpInt);
len := JVM.GetArrayLength(strArray);
for k := 0 to len - 1 do
begin
jobj := JVM.GetObjectArrayElement(strArray, k);
tmpStr := JVM.UnicodeJStringToString(jobj);
Writeln(tmpStr);
end;
frmtest := Tfrmtest.Create(nil);
frmtest.ShowModal;
//我们使用完 JVM 后,要将其释放.
JVM.Free;
end;
exports
Java_alvinJNI_HelloWorld_printText; //为函数做引出声明,这样才能真正的被调用到
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -