利用java jndi调用 delphi写的dll

项目背景: 由于系统由CS+BS架构,在CS架构的基础上增加BS发布浏览检索部分等功能,需要公用一些表,但有些数据表是经过delphi特殊算法加密的,在java中很难找到对应的算法解密。
[b]解决方法:[/b]
1)可以利用delphi写webservice供java调用
2)delphi写httpserver提供解析服务
3)利用jndi使delphi输出java可调用的dll

方法1)开发方便,部署麻烦
方法2)通用性高,开发量大
方法3)在小规模的集成上比较方便,缺点是难调试

根据项目实际情况选择了方法3作为解决办法

下面是一个简单的调用例子

[b]第一部分,利用delphi编写dl[/b]l

library HelloWorldImpl;

uses
JNI;

procedure Java_HelloWorld_displayHelloWorld(PEnv: PJNIEnv; Obj: JObject); {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
begin
Writeln('Hello world!');
end;

exports
Java_HelloWorld_DisplayHelloWorld;

end.


JNI 单元是Java Native Interface with Delphi
提供了Java与Delphi 函数,类等调用转换的接口,并包含了转换Delphi变量到JVM变量等功能

输出的dll文件,如果是普通javaproject可以拷贝到jdk下的bin目录中,如果是tomcat web服务,则可以拷贝到tomcat-home/bin目录下,也可拷贝到jdk下的bin目录,webservice也类似

[b]第二部分 java代码[/b]

class HelloWorld
{
public native void displayHelloWorld();
static
{
System.loadLibrary("HelloWorldImpl");
}
}


[b]第三部分 调用代码示例[/b]

class Main
{
public static void main(String[] args)
{
HelloWorld hw = new HelloWorld();
hw.displayHelloWorld();
}
}


[b]需要注意事项:[/b]

delphi书写函数名的规范示例

function Java_com_common_utils_UnCompressString_unCompress(PEnv: PJNIEnv; Obj: JObject;value:JString):JString; 

函数名必须以Java开头,剩下的部分是Java类的包路径+下滑线 + 类名 + 下滑线 + 方法名

上面的函数对应的java包 com.common.utils 类 UnCompressString 方法 unCompress

函数必须传入至少两个参数 (PEnv: PJNIEnv; Obj: JObject;)

函数参数的数据类型不能用delphi语言自带的,而是用JNI单元里对应的函数


更多Java Native Interface with Delph的使用方法参考地址:[url]http://www.pacifier.com/~mmead/jni/delphi/index.html[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值