Moje pierwsze pytanie tutaj :)Jak przekazać listę obiektów z C++ do C#?
Pracuję z aplikacją napisaną w C++ (edytor map do gry), która ma interfejs użytkownika napisany w języku C#. Ponieważ jestem nowy w C# próbuję zrobić jak najwięcej po stronie C++.
Z C# Chcę wywołać funkcję C++, która zwróci listę struktur z prostymi typami zmiennych (int i string), dzięki czemu mogę wypełnić listę listBox w interfejsie użytkownika. czy to możliwe? Jak napisać funkcję import DLL w C#?
Próbowałem szukać tutaj odpowiedzi, ale znalazłem tylko post, w jaki sposób przekazywać listy z C# do C++.
C++ Kod:
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;
}
funkcji C# importu:
[DllImport("MapEditor.dll")]
static extern ??? GetPropData();
Edycja:
Po postu Ed S. zostały zmienione kodu C++, aby 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];
}
i C# [DllImport ("MapEditor.dll")] statyczny zewnętrzny PropData GetPropData();
struct PropData
{
string myName;
int myID;
}
private void GetPropDataFromEditor()
{
List<PropData> myProps = GetPropData();
}
ale oczywiście to nie kompiluje jako GetPropData() nie wszystko, co przekłada się na liście wrócić.
Wielkie dzięki Ed S. za dotarcie do tego miejsca!
Czy nie mógłby również użyć konstrukcji? Oczywiście łatwiej byłoby zrobić wszystko w jednym języku. Jeśli front-end jest napisany w C#, powinno być możliwe zrobienie wszystkiego w C#. –
Dziękuję za szybką odpowiedź, ale potrzebuję więcej pomocy w składni języka C#, ponieważ powiedziałem, że jestem nowy w tym języku (dopiero zaczynałem dzisiaj), nie wiedziałem nawet, że poradzi sobie ze wskaźnikami. – Cousken
@Ramhound: Nie widzę sposobu, w jaki będzie można stworzyć strukturę C#, która dokładnie naśladuje 'std :: vector'. Działa to tylko dla typów POD. –