NET DLL aus Ressource einer mixed DLL (win32/clr) laden
-
Hallo,
die Überschrift sagt eigendlich schon das wichtigste, ich habe aktuell eine win32 dll welche Managed Code unterstützt (/clr), über Abhängigkeiten habe ich eine c# DLL in diese eingebunden. Das funktioniert alles, solange die c# Dll im gleichen Verzeichnis mit der win32 DLL ist.
Ich würde aber gern nur 1 DLL haben, d.h. die win32 dll (/clr) - und darin z.B. die c# dll als Resource, welche dann zur Laufzeit geladen wird.
ilmerge geht leider nicht, hat jemand eine Idee?
-
Ich versuche nun die DLL über den Handler
AppDomain^ root = AppDomain::CurrentDomain; root->CurrentDomain->AssemblyResolve += gcnew ResolveEventHandler(MyResolveEventHandler);
nachzuladen, mein Problem ist aber, dass die DLL überhaupt nicht soweit geladen wird (und die Anwendung abstürzt), obwohl ich diesen Code direkt am Anfang der ersten Funktion welche aufgerufen wird stehen habe. D.h. die kompilierte DLL (clr) muss scheinbar versuchen die andere (NET-)DLL zu laden bevor ich irgendwie eingreifen kann. Das einzigste was diese wohl vorher lädt ist die Headerdatei für die Klasse, welche die NET DLL verwendet, kann man das irgendwie abfangen?
-
Ok das Problem wurde gelöst.
Es geht wesentlich einfacher wenn man den Quellcode der C# Datei hat.
Grob:
- Einfach eine .netmodule Datei erstellen
- #using <datei.netmodule> dem cpp Projekt hinzufügen und den Verweis auf die orignale dll löschen
der Befehlszeile im cpp Projekt um /link datei.netmodule /LTCG ergänzen, fertig.