2013-04-02 28 views
0

我有一個以前編寫的C++代碼,我希望在其上放置Java用戶界面。這個C++代碼執行三種不同的算法,這些算法需要一些用戶定義的數據類型作爲輸入,並將它們的輸出傳遞給相同的用戶定義參數 我需要用JNA(Java Native Access)編寫的示例代碼,它具有兩個特性:首先,在一個dll中使用不同名稱調用多個函數,然後爲輸入和輸出傳遞參數。 有人可以幫我嗎?用多個參數和三個函數從Java調用C++

+0

這其實很簡單。太糟糕了,你沒有任何手段來設定一個賞金,讓它值得。你給了參考一下嗎?這非常簡單。另外,我相信你可能正在談論* JNI *(Java Native * Interface *)。 – ChiefTwoPencils

+0

我在JNI上花了很多時間去調用這些函數,但它確實存在問題,並且無法完成。你有什麼我可以用的例子嗎? – Maryam

+0

多次提問相同問題不是一個好主意。 – Java42

回答

0

以下是幫助您入門的指導性示例。在這個片段中,Java2Win64是包含要執行的本機代碼的DLL。函數functionMaryam()將1個參數作爲int並返回一個int。易於擴展任何數據類型。

public class JnaExampleMaryam { 

// ------------------------------------------ 
// Java2Win.class 
// ------------------------------------------ 
public interface Java2Win extends Library { 
    Java2Win call = (Java2Win) Native.loadLibrary("Java2Win64", Java2Win.class); 

    int functionMaryam(int i); 
} 

// ------------------------------------------ 

// ------------------------------------------ 
// Test 
// ------------------------------------------ 
public static void main(final String args[]) throws Exception { 
    final File file = new File("rootToDLL", "Java2Win64.dll"); 
    LibraryLoader.loadLibrary(file); 

    int result = Java2Win.call.functionMaryam(42); 

} 
// ------------------------------------------ 
} 
+0

我的功能定義如下: 'extern「C」void PASCAL EXPORT RCS(stAct * act,stResourceDirectory * resDir,stCalendar * calendar,short numOfAct,short numOfRes,short numOfCal,int nDataDate);' 你認爲它可以這樣稱呼它: 'RCS(stAct * act,stResourceDirectory * redDir,...);' – Maryam

+0

@Maryam - 創建一個新問題,標題爲「如何爲使用Pascal調用約定的方法定義JNA庫接口? – Java42