2013-03-27 40 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); 
} 
// ------------------------------------------ 
相关问题