Klasse aus c++ DLL in c# verwenden

Hallo,
bin nicht sicher ob die Rubrik .net oder c++ besser wäre.

Das Problem:

Ich habe eine fertige DLL die mittels Treiber mit einer Hardware kommunizieren sollte. Den Code habe ich natülich nicht, bis auf das .h file. Es gibt einige globale Funktionen zum initialisieren und eine Klasse mit ihren Methoden, die dann die Hardware und ihre Funktionen beschreibt.
In ein c++ Progamm eingebunden, ein objekt erzeugt, die globalen funktionen sowie die methoden aufzurufen funktioniert, das gerät arbeitet.

Jetzt muss ich das ganze in einen mega großen C# Code einbauen.

  1. Ansatz
    Die Dll direkt einbinden, also mittels dllimport sämtliche Funktionen und Methoden über ihre kryptischen Entrypoints bekannt gemacht.

Die Globalen Funktionen funktionieren und geben die entsprechenden Returncodes zurück.

Die Methoden gehen natürlich nicht. „Keine Objektinstanz etc pp“

  1. Ansatz ich hab in c++ eine weitere dll erzeugt, die die ursprüngliche benutzt und erstmal ein globales static object erzeugt, und dessen methoden nach außen hin zur verfügung stellt.

Das ganze in c# mittels ddl import bekannt gemacht.

Ich rufe meine Init Funktion in meiner dll auf, die das objekt erzeugt. Pointer ist nicht null, scheint zu funktionieren.
Dann rufe ich wie im ursprünglichen c++ Exe Code die Funktionen in meiner 2. dll nacheinander auf.

Diese werdne auch ohne murren ausgeführt, keien abstürze wie beim 1. ansatz. Allerdings verhalten sich jetzt die funktionen in der ersten dll anders.

Einige Methoden der Klasse lassen sich fehlerfrei aufrufen.
Einige dafür lassen sich aufrufen, werden auch ausgeführt, allerdings nicht mit dem gewünschten ergebnis. Bzw eben nicht mit dem gleichen ergebnis, wie wenn ich die sachen direkt in einer c++ anwendung aufrufe.

Weiß jemand woran das liegen kann!?
Bzw Weiß jemand wie man das geschickter Lösen kann!?
Wie kann ich Klassen aus einer in c++(ohne .net) geschriebenen DLL in c# verwenden? Funktionen sind kein Problem.

Das Objekt in meiner Wrapper DLL ist statisch, die Methoden der KLasse in der UrsprungsDll sind alle Public benutzen aber Variablen die protected sind.
Ist das ein Problem!? Wäre aber dumm, denn dafür sind die Methoden ja da…

Hallo!

C+±Klassen aus nicht verwalteten DLLs lassen sich leider nicht direkt aus C# heraus verwenden. Keine Chance.

Man muss letztlich einen managed-C++ Wrapper schreiben, der von der nicht verwalteten Klasse erbt.

Hier ist das Verfahren beschrieben:
http://codeguru.earthweb.com/cpp/cpp/cpp_managed/int…

Gruß,
Martin

Cool, irgendwie hatte ich schon tausend Seiten im Netz durch…ich kapier vielelicht nicht ganz alles, was da steht, aber ich glaube so habe ich das jetzt gemacht.
Ich hab eben eine kleine dll in c++ geschrieben, die aus den Klassen der ursprünglichen dll static objekte erzeugt und methoden zur erfügung stellt, die ich in c# importieren kann.
Also mit vererbung von Klassen habe ich jetzt so gar nichts gemacht, und ob das jetzt manged c++ ist weiß ich auch nicht…
die methoden aus der ursprungs dll konnte ich ja auch importieren, nur konnte die nichts, weil es eben keine objekte gab.

Es funktioniert. Grundfunktionalitäten zum Testen laufen bereits mit der Hardware. Jetzt ist viel Fleißarbeit an der dll angesagt, um alle funktionen verfügbar zu machen.
Vielen Dank für den Link.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]