Pregunta

Mi primera pregunta aquí :)

Estoy trabajando con una aplicación escrita en C ++ (un editor de mapas para un juego) que tiene la interfaz de usuario delantera escrita en C#. Como soy nuevo en C#, estoy tratando de hacer lo más posible en el lado de C ++.

Desde C# quiero llamar a una función C ++ que devolverá una lista de estructuras con tipos de variables simples (int y cadena) para que pueda llenar un cuadro de lista que tenga en la interfaz de usuario con ellos. 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 aprobar listas de C# a C ++.

El código 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;
}

La función de importación de C#:

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

EDITAR:

Después de la publicación de Ed S. cambié el código C ++ a estructurar propData {propData (const std :: string aname, const int aid) {myname = aname; myid = ayuda; }

    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# a [dllImport ("mapeditor.dll")] propicata external estática getPropData ();

    struct PropData
    {
        string myName;
        int myID;
    }

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

Pero, por supuesto, esto no se compila ya que GetPropData () no devuelve nada que se traduzca en una lista.

¡Muchas gracias Ed S. por llevarme tan lejos!

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top