C-DLL zur Laufzeit und dynamisch in C# einbinden

d4rkY89

Mitglied
Hi,
wir arbeiten an einem Simulator. Dadurch sind wir gezwungen eine C-DLL zu nutzen, die das Programm enthält, welches in der Simulation - gebunden an ein spezielles Objekt - ausgeführt wird. Den Simulator selbst entwickeln wir mit der Unity-Engine und arbeiten dort mit C#.

Nun funktioniert das Einbinden soweit über [DllImport("...")] ganz gut. Es ist allerdings statisch und dadurch wird die Benutzerfreundlichkeit und die Funktionalität des Simulators stark eingeschränkt.

Beispielsweise können wir somit keine 2 Objeke simulieren, die die gleiche C-DLL nutzen.
Und Entladen lässt sich die DLL dann scheinbar auch nicht mehr.
Außerdem muss die DLL immer einen speziellen Namen haben, der in den DLLImports angegeben ist.

Nun habe ich auf der Suche das ganze dynamisch zu laden die Klasse Assemby entdeckt, die all unsere Probleme auf einen Schlag beseitigen könnte. Diese scheint aber nur mit C#-DLLs zu funktionieren.

Gibt es irgendeine andere Möglichkeit wie wir eine C-DLL dynamisch und mehr als einmal laden können?

Gruß d4rky89
 
Hallo,

dynamisches Laden einer C-DLL funktioniert nur mit den API-Funktionen "LoadLibrary()" zum Laden der DLL und "GetProcAddress()" zum Bereitstellen der jeweiligen Funktionen. Entladen lässt sich die DLL dann wieder mit "FreeLibrary()".

Die genannten API-Funktionen können ihrerseits via DllImport aus der Kernel32.Dll eingenunden werden.

Gruß
MCoder
 
Zurück