项目背景: 由于系统由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
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]
[b]第三部分 调用代码示例[/b]
[b]需要注意事项:[/b]
delphi书写函数名的规范示例
函数名必须以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]
[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]