java 调c写的dll 指针参数返回问题 char* PointerByReference创建 Pointer
2016-10-27 18:08
295 查看
使用jna调用 jna已包含jnate
调用dll为64位的 不能调 32位的
public interface TestDll1 extends Library {
/**
* 当前路径是在项目下,而不是 bin 输出目录下。
*/
TestDll1 INSTANCE = (TestDll1) Native.loadLibrary("TestDll1",
TestDll1.class);
public void say(WString value);
//解密参数 输入 位数 输出指针 返回是否成功
public int xEncrypt(String input, int leninput, PointerByReference dest);
public int xEncrypt(PointerByReference input, int leninput,
PointerByReference dest);
public int xDecrypt(PointerByReference input, int leninput,
PointerByReference dest);
public int xDecrypt(String input, int leninput,
PointerByReference dest);
}
PointerByReference对应的c里的指针 char* 参数
创建方式
private static Pointer createPointer(String phone) {
Pointer p = new Memory(1024);
p.setWideString(0, phone);
return p;
}
加密调用
private static void encryPhone() {
//
// 加密
String encstr = "aaa";
Pointer pointer = createPointer("15626186595");
PointerByReference p1 = new PointerByReference();
p1.setValue(pointer);
PointerByReference p2 = new PointerByReference();
int r = TestDll1.INSTANCE.xEncrypt("15626186595", 11, p2);
System.out.println(p2.getValue());
for(int i = 0; i < p2.getPointer().SIZE; i ++){
System.out.println(p2.getPointer().getString(i));
}
}
PointerByReference 使用的pointer
Pointer 创建由子类Memory创建 创建一定内存的空间
附件为jna 4.2.2的jar包
后期发现内存堆溢出严重
改为使用Memeroy做为指针
Memory memory = new Memory(11);
// PointerByReference p2 = new PointerByReference(pointer);
String res = null;
if (StringUtils.isBlank(res)) {
res = "-1";
}
int r2 = PhoneDllI.INSTANCE.xDecrypt(encryPhone, encryPhone.length(),
memory);
// 判断返回值是否为0 0为成功
if (r2 == 0) {
res = new String(memory.getByteArray(0, 11));
} else {
res = String.valueOf(r2);
}
memory.clear();
if(memory != null){
// System.out.println("in");
memory.clear();
}
调用dll为64位的 不能调 32位的
public interface TestDll1 extends Library {
/**
* 当前路径是在项目下,而不是 bin 输出目录下。
*/
TestDll1 INSTANCE = (TestDll1) Native.loadLibrary("TestDll1",
TestDll1.class);
public void say(WString value);
//解密参数 输入 位数 输出指针 返回是否成功
public int xEncrypt(String input, int leninput, PointerByReference dest);
public int xEncrypt(PointerByReference input, int leninput,
PointerByReference dest);
public int xDecrypt(PointerByReference input, int leninput,
PointerByReference dest);
public int xDecrypt(String input, int leninput,
PointerByReference dest);
}
PointerByReference对应的c里的指针 char* 参数
创建方式
private static Pointer createPointer(String phone) {
Pointer p = new Memory(1024);
p.setWideString(0, phone);
return p;
}
加密调用
private static void encryPhone() {
//
// 加密
String encstr = "aaa";
Pointer pointer = createPointer("15626186595");
PointerByReference p1 = new PointerByReference();
p1.setValue(pointer);
PointerByReference p2 = new PointerByReference();
int r = TestDll1.INSTANCE.xEncrypt("15626186595", 11, p2);
System.out.println(p2.getValue());
for(int i = 0; i < p2.getPointer().SIZE; i ++){
System.out.println(p2.getPointer().getString(i));
}
}
PointerByReference 使用的pointer
Pointer 创建由子类Memory创建 创建一定内存的空间
附件为jna 4.2.2的jar包
后期发现内存堆溢出严重
改为使用Memeroy做为指针
Memory memory = new Memory(11);
// PointerByReference p2 = new PointerByReference(pointer);
String res = null;
if (StringUtils.isBlank(res)) {
res = "-1";
}
int r2 = PhoneDllI.INSTANCE.xDecrypt(encryPhone, encryPhone.length(),
memory);
// 判断返回值是否为0 0为成功
if (r2 == 0) {
res = new String(memory.getByteArray(0, 11));
} else {
res = String.valueOf(r2);
}
memory.clear();
if(memory != null){
// System.out.println("in");
memory.clear();
}
相关文章推荐
- Java 通过 JNA 调用 DLL 返回 char * 字符串乱码问题的解决
- C# 调用C/C++ Dll(参数含char*指针,返回char*指针)
- 安卓开发过程中空指针的问题Java.lang.NullPointerException
- java调用c dll,指针参数和结构体参数搞定
- 安卓开发过程中空指针的问题Java.lang.NullPointerException
- JAVA 通过 JNA 调用 C程序 dll 函数传入中文参数问题
- 解决Context.getExternalFilesDir(null)返回null造成java.lang.NullPointerException的问题
- 关于C++调用jar包,在创建虚拟机时使用JNI_CreateJavaVM调用失败返回-1的问题
- 使用指针做函数返回值和指针作函数参数问题
- MFC之调用DLL的问题:error C2664: “LoadLibraryW”: 不能将参数 1 从“const char *”转换为“LPCWSTR
- 空指针问题(java.lang.NullPointerException)
- 解决Context.getExternalFilesDir(null)返回null造成java.lang.NullPointerException的问题
- java.lang.NullPointerException空的指针问题
- C#中如何使用VC++创建的dll动态链接库的返回参数
- getActionBar()返回为空 空指针错误 Caused by: java.lang.NullPointerException
- 安卓开发过程中空指针的问题Java.lang.NullPointerException
- java调用c dll,指针参数和结构体参数搞定
- VB调用VC++的DLL问题:1.无法返回参数,2.找不到入口点
- 空指针问题(java.lang.NullPointerException)
- java.lang.NullPointerException空指针问题