ここで私の最初の質問:)
C# で記述されたフロント エンド UI を持つ C++ (ゲームのマップ エディター) で記述されたアプリケーションを使用しています。私はC#が初めてなので、C++側でできるだけ多くのことをしようとしています.
C# から、単純な変数型 (int および string) を持つ構造体のリストを返す C++ 関数を呼び出して、UI にある listBox にデータを入力できるようにします。これは可能ですか?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# を [DllImport("MapEditor.dll")] static extern PropData GetPropData(); に
struct PropData
{
string myName;
int myID;
}
private void GetPropDataFromEditor()
{
List<PropData> myProps = GetPropData();
}
もちろん、GetPropData() はリストに変換されるものを何も返さないため、これはコンパイルされません。
Ed S. さん、私をここまで連れてきてくれてありがとう!