0

他の誰かによって Visual Basic ユーザー インターフェイスに接続された C++ コードがあります。C++ を Visual Basic に接続する関数コードの 1 つを次に示します。

   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();
    }
}

Visual Basic の部分を Java GUI に置き換えたいのですが、接続コードを書くのがわかりにくいようです。JNA/SWIG/Runtimeまたは他の方法でネイティブメソッドに引数を渡し、それから結果を受け取ることで、3つのc ++関数を呼び出すのを手伝ってくれる人はいますか?

4

1 に答える 1

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);
}
// ------------------------------------------
于 2013-04-08T21:27:29.847 に答える