运行结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200701225533361.png)
与某网站(https://md5jiami.51240.com/)加密结果相同
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200701225638283.png)
一、 工作环境
1. windows (64位), JDK (64位),dll文件 (64位)
2. Linux (64位), JDK (64位),so文件 (64位)
3. JNA的官方资源路径为https://github.com/twall/jna/
二、 实际操作
1.在cf.h头文件...
我真是个悲剧,最近在用java的JNA写一个调用c++的dll,进行PE文件分析的程序!结果遇到一个大问题,找了2天都没有解决。
问题是这样的:
我在vc中导出的函数PEANALYZER_API char* GetFileName(void);
#ifdef PEANALYZER_EXPORTS
#define PEANALYZER_API __declsp...
最近一个 Java 项目需要调用公司的读卡器读取卡号。C 开发提供了一个读取卡号的 DLL。
Java 调用 DLL 无非三种方法:JNI、JNA、JNative
本来 C 开发测试时用了 JNative.jar 来调用 DLL,但是网路上的 JNative.jar 都是基于 32 位系统,其 jar 包中的两个 DLL 也均为 32 位。
在我本地尝试时都报...
这可能是由于C++和C#使用不同的内存管理机制导致的。C++使用的是手动内存管理,而C#使用的是自动垃圾回收机制。当C++调用C#回调函数并传递char*参数时,C#会将该参数传递给CLR(公共语言运行时),CLR会将该参数保存在堆内存中。由于CLR的自动垃圾回收机制,该堆内存并不会立即被释放,而是等待垃圾回收器进行垃圾回收时才会被释放。因此,在程序结束后才会打印该参数信息。
解决此问题的方法是在C++中对传递的char*参数进行复制,并在回调函数中释放该内存。这样可以确保在C++中打印该参数信息时,该参数的内存已经被释放,不会出现上述问题。