Мой первый вопрос здесь:)
Я работаю с приложением, написанным на C ++ (редактор карт для игры), у которого интерфейс пользователя написан на C #. Поскольку я новичок в C #, я пытаюсь сделать как можно больше на стороне C ++.
Из C # я хочу вызвать функцию C ++, которая будет возвращать список структур с простыми типами переменных (int и string), чтобы я мог заполнить их списком, который у меня есть в пользовательском интерфейсе. Это возможно? Как я должен написать функцию импорта DLL в C #?
Я пытался найти здесь ответ, но нашел только пост о том, как передавать списки из 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();
EDIT:
После сообщения от 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")]
статический extern PropData GetPropData ();
struct PropData
{
string myName;
int myID;
}
private void GetPropDataFromEditor()
{
List<PropData> myProps = GetPropData();
}
но, конечно, это не компилируется, поскольку GetPropData () не возвращает ничего, что переводится в список.
Большое спасибо, Эд С., за то, что ты так далеко зашёл!