我的環境如下
- Eclipse 3.4.2
- jNative 的lib http://sourceforge.net/projects/jnative/
1.
透過
建立專案
add.h:
#define DLLEXPORT extern "C" _declspec(dllexport)
DLLEXPORT int addTest(int a, int b);
DLLEXPORT char* getString();
add.cpp:
#include "add.h";
int addTest(int a, int b)
{
return a+b;
}
char* getString()
{
char* test = "this is test";
return test;
}
http://hi.baidu.com/44997/blog/item/dcf47b59198b2d2a2934f0e1.html
http://blog.csdn.net/askAloe/archive/2006/09/08/1192522.aspx
2. java 端讀取
以下是我修改後的範例
編譯前記得匯入jnative.jar
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
public class LoadDllDemo {
public static final String GetString() throws NativeException,IllegalAccessException
{
JNative n = null;
String str=null;
try {
// 取得
n = new JNative("add.
// 設定回傳質類型
n.setRetVal(Type.STRING);
// 使用方法
n.invoke();
// 取得回傳值
str=n.getRetVal();
return str;
} finally {
if (n != null)
// relase
n.dispose();
}
}
public static final int addTest(int a, int b) throws NativeException,IllegalAccessException
{
JNative n = null;
int x=0;
try {
// 取得
n = new JNative("add.
// 設定回傳質類型
n.setRetVal(Type.INT);
// 設定傳入參數 setParameter(位置, 類型 , 值)
// 值 必須是 string
n.setParameter(0, Type.INT, ""+a);
n.setParameter(1, Type.INT, ""+b);
// 使用方法
n.invoke();
// 取得回傳值
x=Integer.parseInt(n.getRetVal());
return x;
} finally {
if (n != null)
// relase
n.dispose();
}
}
public static void main(String[] args) throws NativeException, IllegalAccessException{
System.out.println("LoadDllDemo 的 String : ");
System.out.println(LoadDllDemo.GetString());
System.out.println("------------------------------------------------- ");
System.out.println("LoadDllDemo 的 addTest function : 5+7= ");
System.out.println(LoadDllDemo.addTest(5,7));
}
}
沒有留言:
張貼留言