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.
- 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“
- 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…