質問

ここでの私の最初の質問:)

私は、C ++(ゲームのマップエディター)で書かれたアプリケーションで作業しています。私はC#を初めて使用しているので、C ++側で可能な限りやろうとしています。

C#から、単純な変数タイプ(intおよび文字列)を持つ構造体のリストを返すC ++関数を呼び出して、UIに持っているリストボックスをそれらと一緒に入力できるようにします。これは可能ですか? C#でDLLインポート関数をどのように記述する必要がありますか?

ここで回答を検索してみましたが、C#からC ++にリストを渡す方法の投稿だけを見つけました。

C ++コード:

struct PropData
{
PropData( const std::string aName, const int aId )
{
    myName = aName;
    myID = aId;
}

std::string myName;
int myID;
};

extern "C" _declspec(dllexport) std::vector<PropData> _stdcall GetPropData()
{
std::vector<PropData> myProps;

myProps.push_back( PropData("Bush", 0) );
myProps.push_back( PropData("Tree", 1) );
myProps.push_back( PropData("Rock", 2) );
myProps.push_back( PropData("Shroom", 3) );

return myProps;
}

C#インポート関数:

    [DllImport("MapEditor.dll")]
    static extern ??? GetPropData();

編集:

Ed S.からの投稿の後、C ++コードをstruct propdata {propdata(const std :: string aname、const int aid){myname = aname; myid = aid; }

    std::string myName;
    int myID;
};

extern "C" _declspec(dllexport) PropData* _stdcall GetPropData()
{
    std::vector<PropData> myProps;

    myProps.push_back( PropData("Bush", 0) );
    myProps.push_back( PropData("Tree", 1) );
    myProps.push_back( PropData("Rock", 2) );
    myProps.push_back( PropData("Shroom", 3) );

    return &myProps[0];
}

およびc#to [dllimport( "mapeditor.dll")] static extern propdata getPropdata();

    struct PropData
    {
        string myName;
        int myID;
    }

    private void GetPropDataFromEditor()
    {
        List<PropData> myProps = GetPropData();
    }

しかし、もちろんこれはコンパイルされません。GetPropData()はリストに変換されるものを返しません。

ここまで私を連れて行ってくれてありがとうED S.に感謝します!

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top