Im Forum wurde schon öfters gefragt ob es nicht möglich ist native (C) Dll Dateien aus dem Speicher zu laden. Genau das ermöglicht MemoryModule.net
Es handelt sich dabei um einen "straigtforward" .net/C# Port von Memory Module von Joachim Bauch. Loading a DLL from memory
"Straigtforward" deshalb weil ich massiv den Unsafe-Kontext nutze und deshalb den originalen C-Code großteils übernehmen konnte. Man kann schon staunen wie ähnlich sich C# seinem Vorfahr sehen kann.
Kleines (unvollständiges) Beispiel:
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
private delegate int AddNumbersDelegate(int a, int b);
//...
byte[] dll = Properties.Resources.SampleDll;
MemoryModule memModule = new MemoryModule(dll);
AddNumbersDelegate AddNumbers = (AddNumbersDelegate)memModule.GetDelegateFromFuncName("AddNumbers", typeof(AddNumbersDelegate));
int i = AddNumbers(40, 2);
Allerdings gibt es einige Einschränkungen:
- Z.z. werden nur 32bit Dll's unterstützt. 64bit Support ist in der nächsten Version geplant.
- Probleme bereiten lt. Kommentaren auf Joachim Bauchs Seite Dll's die andere DLL's nachladen, z.B. wenn per Loadibary() eine Dll von der Platte nachgeladen wird.
- OCX Controls werden nicht unterstützt
Verfügbar, inkl. einem kleinen Beispielprogramm, ist das ganze unter der MPL (Mozilla Public License) 2.0 in meinem GIT-Repro:
https://github.com/Scavanger/MemoryModule.net
Bitte dort auch die Bug-Repots posten.
Danke
Schlagwörter: native, dll, speicher, laden, late binding, in memory execution, c