2013-03-27 42 views
0

我有一個C++代碼已經被其他人連接到一個可視基本用戶界面。這裏是連接C++到Visual Basic的功能代碼之一:使用輸入和輸出參數在Java中調用C++函數

extern "C" void PASCAL EXPORT RCS(stAct* act,stResourceDirectory* resDir, stCalendar* calendar, short numOfAct, short numOfRes, short numOfCal, int nDataDate) 
{ 
Network network; 
short id; 
Activity* p_act; 
node<Activity>* p_node; 

    // Setting 
    network.create_calendars (calendar, numOfCal); 
    network.set_data_date (nDataDate); 
    set_activity(network, act, numOfAct); 
// only for id, duration, and description 
    set_resource(network, act, resDir, numOfAct, numOfRes); 
// create resource profile and add required resource for every activity 

    network.CPM(); 

    p_node = network.get_network_head_p(); 

    while (p_node != NULL) { 
    p_act = p_node->refer_data(); 
    id = p_act->get_ID(); 

    act[id].TF_in_CPM = p_act->get_TF_min(); 
    act[id].FF_in_CPM = p_act->get_FF(); 
    act[id].EST_in_CPM = p_act->get_EST(); 
    act[id].EFT_in_CPM = p_act->get_EFT(); 
    act[id].LST_in_CPM = p_act->get_LST(); 
    act[id].LFT_in_CPM = p_act->get_LFT(); 
    p_node = p_node->get_link(); 
    } 
    network.RCS(); 
p_node = network.get_network_head_p(); 

while (p_node != NULL) { 
    p_act = p_node->refer_data(); 
    id = p_act->get_ID(); 

    act[id].TF_in_RCS = p_act->get_TF_min(); 
    act[id].FF_in_RCS = p_act->get_FF(); 
    act[id].EST_in_RCS = p_act->get_EST(); 
    act[id].EFT_in_RCS = p_act->get_EFT(); 
    act[id].LST_in_RCS = p_act->get_LST(); 
    act[id].LFT_in_RCS = p_act->get_LFT(); 

    p_node = p_node->get_link(); 
    } 
} 

我想更換使用Java GUI的Visual Basic中的一部分,它似乎混淆了我寫的連接代碼。有沒有人可以通過JNA/SWIG/Runtime或其他任何你認爲會更容易更好的方法來調用三個C++函數,並傳遞參數給本地方法並從中接收結果?

回答

0

以下是幫助您入門的指導性示例。在這個片段中,Java2Win64是包含要執行的本機代碼的DLL。函數functionMaryam()將1個參數作爲int並返回一個int。易於擴展任何數據類型。 公開課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); 
} 
// ------------------------------------------ 
相關問題