Java 调用Delphi dll学习笔记

本文介绍了一种通过JNI实现Java程序调用Delphi DLL的方法。具体包括Java侧的Cdll和MainClass类定义,以及Delphi侧的JavaCall DLL实现。演示了字符串传递和处理的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Cdll.java

···
package Liberary;

public class Cdll {
static {
System.loadLibrary(“JavaCall”);
}
public native void printText(String s);
public native String fstring(String s);
}
···

二、MainClass.java


···
package Liberary;

public class MainClass {
public static void main(String[] args) {
Cdll jc = new Cdll();
String j;

     j = jc.fstring("无为");
     System.out.println(j);
     jc.printText("测试");
 }

}
···
三、javaCall.dpr

···
library JavaCall;

uses
SysUtils,
Classes,
JNI;

{$R *.res}

procedure Java_Liberary_Cdll_printText(S: string); stdcall;
begin
//函数体非常简单,因为我们只是了解一下如何调用 Delphi 的函数.
Writeln(S ‘您好!看到效果了吧。’);
end;

function Java_Liberary_Cdll_fstring(PEnv: PJNIEnv; Obj: JObject; arg: JString): JString; stdcall;
var
tmpStr: String;
JVM: TJNIEnv;
tt: Boolean;
begin
JVM:= TJNIEnv.Create(PEnv);
//我们这里先把参数提交过来的 JString 转换成 Delphi 中的 String 后就可以使用了
tmpStr := ‘你想输出的字符串是: "’ JVM.UnicodeJStringToString(arg) ‘"。’;
//当字符串要转换成 JString 我们需要先对字符串进行 UTF8 编码后再转换成 PChar 再转换成 JString
//这样才能保证返回的字符串在 JAVA 中不乱码
Result := JVM.StringToJString(pchar(UTF8Encode(tmpStr)));
JVM.Free;
end;

exports
Java_Liberary_Cdll_printText, //为函数做引出声明,这样才能真正的被调用
Java_Liberary_Cdll_fstring;
begin

end.
···
四、JNI.pas

http://www.blogjava.net/Files/alvin/jni_pas.zip

以上内容为转载,我试了一下,是可以实现的。在写的时候,为了少走弯路,请阅读以下说明:

1.delphi中新建dll文件后,在uses后加入JNI;将下载后的JNI.PAS和JNI_MD.INC(http://www.blogjava.net/Files/alvin/jni_pas.zip)要先放至新建dll同一目录下。

2.注意stdcall;和exports的使用;exports后放函数名,不带参数,多个用逗号隔开。

3.delphi接收java中的字符串变量要经过转换后才能在delphi中使用,其它常用类型好像可以直接使用。

4.delphi中函数(或过程)命名规则:

(Java_) (package包名) _(class文件名) (调用函数名)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值