介绍 给大家介绍一个最新的访问本机代码的 Java 框架 —JNA . JNA(Java Native Access) 框架是一个开源的 Java 框架,是 SUN 公司主导开发的,建立在经典的 JNI 的基础之上的一个框架. JNA 项目地址: https://jna.dev.java.net/ 非常强大.易用,功能上类似与 .NET 的 P/Invoke . 不堪回首的 JNI 我们知道,使用 JNI 调用 .dll/.so 共享类库是非常非常麻烦和痛苦的. 如果有一个现有的 .dll/.s…
Delphi代码 unit UnitDll; interface uses StrUtils, SysUtils, Dialogs; function DoBusinessWide(pvData: PWideChar): PWideChar; stdcall; implementation function DoBusinessWide(pvData: PWideChar): PWideChar; stdcall; var lvData: WideString; begin ShowMessag…
Delphi代码 unit UnitDll; interface uses StrUtils, SysUtils, Dialogs; function DoBusinessAnsi(pvData: PAnsiChar): PAnsiChar; stdcall; implementation function DoBusinessAnsi(pvData: PAnsiChar): PAnsiChar; stdcall; var lvData: AnsiString; begin ShowMessag…
Delphi与JAVA基本数据类型对比 类型 Delphi关键字 JAVA关键字 字节 备注 范围 整型 Shortint byte 1 有符号8位 -128..127 Byte 1 无符号8位 0 .. 255 Smallint short 2 有符号16位 -2^15..2^15-1 Word 2 无符号16位 0 .. 65535 Longint int 4 有符号32位 -2^63..2^63-1 Longword 4 无符号32位 0 .. 4294967295 Integer int…
公司的业务需要,nodejs要读取文件版本号. 同事要求我用delphi编写dll,以供nodejs调用,结果通过json返回. delphi代码如下: function GetFileInfo(APath: PAnsiChar): PAnsiChar; var sPath: string; FInfoSize, Temp, Len: Cardinal; InfoBuf: Pointer; TranslationLength: Cardinal; TranslationTable: Pointe…
技术实现 如何逐步实现动态库的加载,类型的匹配,动态链接库函数导出的定义,参考下面宏定义即可: #define LIBEXPORT_API extern "C" __declspec(dllexport) 第一步,我先从简单的调用出发,定义了一个简单的函数,该函数仅仅实现一个整数加法求和: LIBEXPORT_API int mySum(int a,int b){ return a+b;} C# 导入定义: public class RefComm { [DllImport("…
参数整数没有问题,但是如果是字符串,要注意几个细节. 记录如下: 1.Delphi定义函数的时候,字符串参数需要使用PChar类型 2.Go传递参数的时候要将字符串转成UTF16的指针,接收的时候采用uint16的切片. dll := syscall.MustLoadDLL("Encryptdll.dll") defer syscall.FreeLibrary(dll.Handle) f1 := dll.MustFindProc("test06") fmt.Prin…
1.前言: 最近接手了一个项目需要和Delphi语言编写的一个系统进行一些接口的对接,数据在传输过程中采用Des加密方式,因为Delphi 平台的加密方式和C#平台的加密方式不互通,所以采用的方式是C#通过调用Delphi编写好的Dll通过C#中的DllImport进行数据的加解密,其实原本是很简单的一个过程,在中间遇到了一些坑,希望能够分享这次经验,能够避免更多的人踩到这个坑: 2.后续 C#和delphi平台对接的接口 Delphi 有两个方法: Estr加密,参数1:加密参数,参数2:秘钥…
用java调用C++写的DLL一直以来都是一个比较麻烦但又很常见的问题. 我们知道,使用 JNI 调用 .dll/.so 共享类库是非常非常麻烦和痛苦的. 如果有一个现有的 .dll/.so 文件,如果使用 JNI 技术调用,我们首先需要另外使用 C 语言写一个 .dll/.so 共享库,使用 SUN 规定的数据结构替代 C 语言的数据结构,调用已有的   dll/so 中公布的函数.然后再在 Java 中载入这个适配器 dll/so ,再编写 Java   native 函数作为 dll 中函…
最近因为工作需要,客户那边工程师使用的是JAVA语言开发的程序,我们这边平台中是用C#语言开发的,因为有些操作必须统一,所以我在网上查找解决方法,自己也实践过,在这里做个笔记吧,分享一下. 声明:下面操作主要分为两部分,第一部分使用C#编写com为了写这篇文章我是新建的操作demo, 第二部分java调用c#编写的com组件,因为是工作时的demo,因为当时有给客户写了使用说明,在这里拿一些截图出来用一下,为了节省时间,我就不再操作一遍了,如有不理解的可以留言. 一.使用C#编写com组件 开发…