关于JAVA调用C++的几种方式和一些问题
java调用c++有几种方式,1.JNA方式,2,JNative 方式,3.JNI 方式。:
1.JNA方式
public interface MyCLibrary extends Library {
MyCLibrary INSTANCE =(MyCLibrary)Native.loadLibrary("Image", MyCLibrary.class);
WString Preprocess( WString inputStr);
int add(int a,int b);
}
Image.dll 位于src 根目录下
然后在MainFrame中处理
public static void main(String[] args) {
MainFrame frame = new MainFrame();
frame.setVisible(true);
//WString 可以传中文
WString wPStr = new WString("123qqq你好");
WString newPStr = (WString)MyCLibrary .INSTANCE.Preprocess(wPStr);
System.out.println("newPath =="+newPStr );
int result = MyCLibrary.INSTANCE.add(3,5);
System.out.println("result =="+result);
}
下面是生成DLL的C++程序代码:
#include "stdafx.h"
extern "C" __declspec(dllexport) wchar_t* Preprocess(wchar_t* inputStr) ;
extern "C" __declspec(dllexport) int add(int a, int b);
wchar_t* Preprocess(wchar_t* inputStr) {
return inputStr;
}
int add(int a, int b) {
return a + b;
}
wchar_t* 对应java中的WString
MyCLibrary 的函数
WString Preprocess( WString inputStr);
int add(int a,int b);
和C++ 的函数 对应
wchar_t* Preprocess(wchar_t* inputStr) {
return inputStr;
}
int add(int a, int b) {
return a + b;
}
最后java的main函数调用即可,返回结果为8
int result = MyCLibrary.INSTANCE.add(3,5);
JNA jar包下载,csdn上传资源最少2分 没办法 http://download.csdn.net/download/lyfls/10157058
常见错误
1.声明函数一定要是 extern “C” __declspec(dllexport) 不然会报错 Exception in thread “main” java.lang.UnsatisfiedLinkError: Error looking up function ‘Preprocess’: 找不到指定的程序。
2.Exception in thread “main” java.lang.UnsatisfiedLinkError: 找不到指定的模块 .C++生成DLL版本的问题,升级vs版本2010 到2015
注意:如果一直报错误Error looking up function ‘Preprocess’: 找不到指定的程序。 进行如下操作:
1.建立一个新的C++的DLL工程 :使用默认的
include “stdafx.h”
2.再复制下面语句,不要包含头文件:
extern "C" __declspec(dllexport) wchar_t* Preprocess(wchar_t* inputStr) ;
extern "C" __declspec(dllexport) int add(int a, int b);
wchar_t* Preprocess(wchar_t* inputStr) {
return inputStr;
}
int add(int a, int b) {
return a + b;
}
本文介绍通过JNA实现Java调用C++的具体方法,包括示例代码、常见错误及解决办法。

608

被折叠的 条评论
为什么被折叠?



