Mi primera pregunta aquí :)¿Cómo pasar una lista de objetos de C++ a C#?
Estoy trabajando con una aplicación escrita en C++ (un editor de mapas para un juego) que tiene la interfaz de usuario del front-end escrita en C#. Como soy nuevo en C# estoy tratando de hacer todo lo posible en el lado de C++.
Desde C# deseo llamar a una función de C++ que devolverá una lista de estructuras con tipos de variables simples (int y cadena) para que pueda poblar una listBox que tengo en la UI con ellas. es posible? ¿Cómo debo escribir la función de importación dll en C#?
He intentado buscar aquí la respuesta, pero solo encontré una publicación sobre cómo pasar listas de C# a C++.
El C++ código:
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;
}
La función C# importación:
[DllImport("MapEditor.dll")]
static extern ??? GetPropData();
EDIT:
Después de que el poste de Ed S. He cambiado el ++ código c para PropData struct { 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];
}
y el C# para [DllImport ("MapEditor.dll")] extern estático PropData GetPropData();
struct PropData
{
string myName;
int myID;
}
private void GetPropDataFromEditor()
{
List<PropData> myProps = GetPropData();
}
pero por supuesto esto no se compila como GetPropData() no devuelve nada de lo que se traduce en una lista.
¡Muchas gracias Ed S. por llevarme tan lejos!
¿No podría él también podría usar una estructura? Por supuesto, sería más fácil hacer todo en un solo idioma. Si el front-end está escrito en C#, debería ser posible hacer todo en C#. –
Gracias por la respuesta rápida, pero necesito más ayuda con la sintaxis de C#, ya que dije que soy nuevo en el lenguaje (recién empecé hoy), ni siquiera sabía que podía manejar punteros. – Cousken
@Ramhound: no veo cómo será capaz de crear una estructura C# que imite exactamente un 'std :: vector'. Eso solo funciona para los tipos de POD. –