`

利用java jndi调用 delphi写的dll

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

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

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

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

第一部分,利用delphi编写dll

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也类似

第二部分 java代码

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


第三部分 调用代码示例

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


需要注意事项:

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的使用方法参考地址:http://www.pacifier.com/~mmead/jni/delphi/index.html













分享到:
评论

相关推荐

    JNDI调用分布式EJB3 通用接口

    在IT行业中,Java Naming and Directory Interface (JNDI) ...总的来说,JNDI调用分布式EJB3是一个涉及网络通信、分布式系统和Java企业级开发的重要主题。理解这一过程对于开发和维护大型、可扩展的企业应用至关重要。

    java jndi的使用

    Java JNDI(Java Naming and Directory Interface)是Java平台中用于访问命名和目录服务的一组API。它允许Java开发者在应用程序中查找和绑定资源,如数据源、EJB(Enterprise JavaBeans)、邮件服务器等。JNDI的核心...

    三种方式实现java远程调用(rmi),绝对可用

    在提供的压缩包文件中,"三种方式(原始方式_spring_jndi)实现java远程调用(rmi)"包含了相关的示例代码,帮助开发者理解并实践这三种RMI实现方法。在MyEclipse或其他Java开发环境中导入这些代码,可以进行调试和...

    java JNDI总结

    ### Java JNDI总结 #### 一、JNDI简介 **JNDI**(Java Naming and Directory Interface)是Java平台中的一个API,用于访问命名和目录服务,这些服务可以存储对象引用及其名称。JNDI的主要作用在于提供了一种在...

    javaJNDI连接数据库

    通过上述步骤,我们可以在Java应用中利用JNDI实现数据库连接的动态配置,这样不仅提高了代码的可维护性和扩展性,也使得系统更加灵活。此外,这种方式还能够有效地管理数据库连接池,减少资源占用,提高系统的整体...

    JavaJNDI 数据链接池及 属性文件读取数据链接信息

    JavaJNDI(Java Naming and Directory Interface)是Java平台中用于访问命名和目录服务的一组API,它允许Java应用程序查找和管理分布在不同网络环境中的资源。数据连接池(Connection Pool)是Java应用中用于管理...

    JNDI代码样例

    本示例将聚焦于如何利用JNDI来调用CS(Client-Server)架构中的类库DLL。在CS模式中,客户端应用通过接口与服务器端的类库交互,而JNDI可以作为桥梁,帮助Java应用找到并使用这些非Java的资源。 首先,理解JNDI的...

    java 采用JNDI访问数据库(三种方法)

    Java 通过JNDI(Java Naming and Directory Interface)访问数据库是一种常见的做法,它提供了一种标准的方法来查找和管理资源,如数据源、EJB、邮件服务器等。JNDI在企业级应用中广泛使用,因为它允许应用程序与...

    jndi-tool JNDI服务利用工具

    RMI允许Java对象在不同的Java虚拟机之间进行远程调用,而LDAP则是一种用于存储和检索结构化信息的目录服务协议。 JNDI注入攻击通常发生在应用程序不当处理JNDI查找时,攻击者可以通过构造恶意的JNDI引用来执行任意...

    JNDI Java操作示例

    ### JNDI Java操作示例解析 #### 一、引言 JNDI(Java Naming and Directory Interface)是Java平台中用于访问命名和目录服务的API。它提供了一种查找和定位应用程序所需的资源(如数据库连接、消息队列、EJBs等)...

    基于JavaJNDI的LDAP Demo

    基于Java JNDI 操纵LDAP的基础实现,包括LDAP连接相关生命周期,认证的两种策略demo,条目的操作,schema的基础操作包括(attributeDefinition\objectDefinition\)但未包含相关syntaxDefinition的操纵. 没有资源分的朋友...

    技术专栏 _ 深入理解JNDI注入与Java反序列化漏洞利用.pdf

    在深入探讨JNDI注入与Java反序列化漏洞之前,我们需要对几个关键概念有所了解,这包括Java远程方法调用(RMI)、Java名称目录接口(JNDI)、Java远程消息交换协议(JRMP)、以及序列化和反序列化。 RMI是Java环境中...

    Java Jndi数据连接池,sql2000或者sql2005数据库

    DataSource source = (DataSource) ic.lookup("java:comp/env/jdbc/jndidemo"); dbcon = source.getConnection(); 需要导的包 import javax.naming.Context; import javax.naming.InitialContext; import ...

    JAVA JNDI免证书修改AD域密码.zip

    在IT领域,特别是Java开发中,`JAVA JNDI免证书修改AD域密码`是一个重要的主题,涉及到企业级应用与Active Directory(AD)域服务的交互。Active Directory是微软提供的目录服务,用于集中管理网络资源,如用户账户...

    java 调用存储过程 实例

    在Java编程中,调用数据库的存储过程是常见的任务,特别是在处理复杂的业务逻辑或数据操作时。本实例将深入探讨如何使用Java来调用Oracle数据库中的存储过程。 首先,我们需要了解存储过程的基本概念。存储过程是预...

    JAVA中JNDI源码范例

    Java Naming and Directory Interface (JNDI) 是Java平台中用于访问和管理命名和目录服务的一组接口和类。它提供了一种标准的方式来查找、绑定和管理分布式系统中的资源,如数据库连接、邮件服务器、对象服务等。在...

    Java演示JNDI的使用.rar

    Java演示JNDI(Java Naming and Directory Interface)的使用是一个重要的概念,特别是在企业级Java应用程序开发中,如EJB(Enterprise JavaBeans)。JNDI是一个API,它为Java应用程序提供了一个标准接口来查找和...

    JNDI配置原理详解.doc

    对于非服务器环境,可以通过启动一个本地的RMI(远程方法调用)服务来实现JNDI功能。以下是创建RMI注册表并绑定对象到JNDI上的示例代码: ```java LocateRegistry.createRegistry(1099); System.setProperty...

    JNDI 详细解读

    JNDI (Java Naming and Directory Interface) 是 Java 命名和目录接口的简称,自 Java 2 平台企业版问世以来一直是核心技术之一。它为开发者提供了一个统一的接口,用于查找、获取和管理各种分布式环境中的命名资源...

    JNDI详细配置解析

    JNDI(Java Naming and Directory Interface,Java命名和目录接口)是Java平台提供的一套API,用于在Java应用程序中访问命名和目录服务。它允许开发者以统一的方式查找、绑定和命名对象。本文将详细介绍JNDI在Tomcat...

Global site tag (gtag.js) - Google Analytics