Hallo zusammen,
wir haben hier auf der Arbeit eine Software die sich wenn angegeben Bibliotheken dazu lädt und mittels externer Aufrufe Funktionen ausführt.
Da mir die Basis einer jeden Plugin DLL aber gewaltig auf den S*** geht und alles viel zu umständlich ist, habe ich mich ein wenig informiert und rausgefunden, dass man mit .NET genau solche Exports erstellen kann (Gibt da ein NuGet Package .NET Exports oder so ähnlich).
Damit kann ich jede x beliebige Funktion mit
Jetzt gibt es bei mir im Projekt nachher eine
Diese hat einen string Konstruktor und einen string Member. Der string Member wird im Konstruktor zugewiesen.
Eine Export Funktion muss jetzt diese Analysis Klasse instanzieren und den Pointer auf die Struct in einem DWORD zurückliefern.
Jetzt kommt der Part an dem ich keine Ahnung habe wie sowas funktioniert. Ich habe schon rausgefunden, dass dies wohl mit GCHandle.Alloc(analysisObj, GCHandleType.Pinned) funktionieren soll.
Mit dem GCHandle kann ich dann AddrOfPinnedObj aufrufen und habe dadurch den Pointer.
Allerdings haperts beim GCHandle.Alloc und der meckert das mein Objekt keine primitiven Datentypen enthält. Gut dachte ich mir string ersetzen wir dann mal testweise durch nen integer weil der ja primitiv ist und voila es funktioniert. Aber ich brauche einen string in diesem Objekt.
Wie also genau funktioniert das ganze jetzt mit dem string datentyp?
Danke im Voraus
wir haben hier auf der Arbeit eine Software die sich wenn angegeben Bibliotheken dazu lädt und mittels externer Aufrufe Funktionen ausführt.
Da mir die Basis einer jeden Plugin DLL aber gewaltig auf den S*** geht und alles viel zu umständlich ist, habe ich mich ein wenig informiert und rausgefunden, dass man mit .NET genau solche Exports erstellen kann (Gibt da ein NuGet Package .NET Exports oder so ähnlich).
Damit kann ich jede x beliebige Funktion mit
[DllExport]
kennzeichnen und schwubs kann unsere Software die Methoden auch schon aufrufen. Das funktioniert! Habbich getestet!Jetzt gibt es bei mir im Projekt nachher eine
struct Analysis
Diese hat einen string Konstruktor und einen string Member. Der string Member wird im Konstruktor zugewiesen.
Eine Export Funktion muss jetzt diese Analysis Klasse instanzieren und den Pointer auf die Struct in einem DWORD zurückliefern.
Jetzt kommt der Part an dem ich keine Ahnung habe wie sowas funktioniert. Ich habe schon rausgefunden, dass dies wohl mit GCHandle.Alloc(analysisObj, GCHandleType.Pinned) funktionieren soll.
Mit dem GCHandle kann ich dann AddrOfPinnedObj aufrufen und habe dadurch den Pointer.
Allerdings haperts beim GCHandle.Alloc und der meckert das mein Objekt keine primitiven Datentypen enthält. Gut dachte ich mir string ersetzen wir dann mal testweise durch nen integer weil der ja primitiv ist und voila es funktioniert. Aber ich brauche einen string in diesem Objekt.
Wie also genau funktioniert das ganze jetzt mit dem string datentyp?
Danke im Voraus
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „seh“ ()