generischen Typ von C++ nach C# (.NET)



  • Hiho, ich will ne Library auch für C# verfügbar machen, jetzt hab ich mir gedacht dass ich den Code ein wenig anpasse und dann einfach .NET Objekte zurückliefere leider weiß ich nich wie ich das "marshaln" kann weil es ja scheinbar nicht mit generischen Datentypen geht 😕
    Aber List im folgenden Fall ist doch ein .NET Typ und sollte doch auch irgendwie übergeben werden können oder?

    Hier mal das Beispiel, welches nicht geht:

    C++

    System::Collections::Generic::List<int>^ libtest::getListe() {
    	System::Collections::Generic::List<int>^ meineListe;
    	meineListe->Add(1);
    	meineListe->Add(2);
    	meineListe->Add(3);
    	return meineListe;
    }
    

    C#

    [DllImport("testlib.dll", EntryPoint = "getListe")]
    public static extern List<int> getListe();
    
    [STAThread]
    static void Main() {
    
    	List<int> meineListe = getListe();
    
    	Console.WriteLine(meineListe[0]);
    	Console.WriteLine(meineListe[1]);
    	Console.WriteLine(meineListe[2]);
    }
    


  • Mal ne Frage, wenn die DLL eh C++/CLI verwendet, wieso exportierst Du dann nicht gleich .NET-Klassen statt der low-level-Funktionssignaturen?



  • Ja, ist mir auch gerade aufgefallen das es so einfach geht, sorry 😕

    Allerdings bekomm ich beim normalen import immer eine System.BadImageFormatException mit dem Hinweis dass das Fileimage eventuell kein managed Assembly ist.

    Ich erstelle die Lib mit VC++ 2005, ich wähle einfach CLR und dann Klassenbibliotheke aus, ist das richtig?
    Oder muss ich, damit es managed Code bleibt noch etwas bestimmtes einstellen?

    Ich glaub der Thread macht jetzt mehr Sinn im CLI Forum 😕

    So, hat sich erledigt!
    Falls noch jemand anders das selbe Problem haben sollte: der Fehler tritt auf weil ich ein 64 Bit Betriebssystem habe, die Lib aber für eine 32 Bit Plattform erstellt wurde. Die 32 Bit DLL läst sich somit nicht in das C# Projekt einbinden, dafür musste ich diese erst neu für 64 Bit kompilieren 😉



  • Ja, da habe ich längere Zeit für gegoogelt um da drauf zu kommen ...


Anmelden zum Antworten