Hallo,
ich entwickle auf der Arbeit derzeit eine native C++ Applikation, hasse es aber mich mit MFC rumzuschlagen. Es ist einfach nur krampfig, deshalb habe ich gestern zuhause ein paar Tests gemacht.
Ich habe eine WPF Custom Control Library (.NET) erstellt in der ich eine statische Methode habe und mit einem Plugin [DllExport] fähig ist. Somit hat die .NET Library eine Export Methode, welche eine WPF Form aufruft.
Dann bin ich in C++ hingegangen und habe mit
Nun bin ich etwas verwundert wieso das funktioniert, denn laut MSDN:
Wieso also, da die .NET Library keine DllMain Methode hat, liefert mir LoadLibrary ein gültiges Handle und nicht NULL?
Gibt es den DllMain Einstiegspunkt bei .NET Libraries wirklich? Wenn ja, kann ich den selbst auch benutzen, sodass ich direkt Aktionen ausführen kann wenn die Bibliothek geladen wird?
Dann bräuchte ich nämlich keine Exports sondern kann den GUI Kram von WPF erledigen und mittels unsafe die paar Eigenschaften die ich bearbeiten will direkt patchen.
Das alles funktioniert bisher super: Methode wird exportiert: Mittels LoadLibrary lade ich die Dll in C++, hab mir ein typedef gemacht welche die Signatur der Methode beschreibt, habe mit GetProcAddress den Export Address besorgt und kann die Methode einfach aufrufen. (Die Methode hat einen Pointer Parameter zu einer Options-Klasse).
In meiner C# Methode die dann aufgerufen wird, kann ich mit unsafe und dem Pointer zur Options-Klasse die Struktur nachbilden und dort weiterarbeiten.
Ich würde nur gern den technischen Hintergrund besser verstehen, wieso unmanaged c++, managed .NET bibiliotheken laden kann.
Grüße
ich entwickle auf der Arbeit derzeit eine native C++ Applikation, hasse es aber mich mit MFC rumzuschlagen. Es ist einfach nur krampfig, deshalb habe ich gestern zuhause ein paar Tests gemacht.
Ich habe eine WPF Custom Control Library (.NET) erstellt in der ich eine statische Methode habe und mit einem Plugin [DllExport] fähig ist. Somit hat die .NET Library eine Export Methode, welche eine WPF Form aufruft.
Dann bin ich in C++ hingegangen und habe mit
LoadLibrary
eben genau diese .NET Library geladen.Nun bin ich etwas verwundert wieso das funktioniert, denn laut MSDN:
(Quelle: msdn.microsoft.com/en-us/libra…op/ms684175(v=vs.85).aspx)If the specified module is a DLL that is not already loaded for the calling process, the system calls the DLL's DllMain function with the DLL_PROCESS_ATTACH value. If DllMain returns TRUE, LoadLibrary returns a handle to the module. If DllMain returns FALSE, the system unloads the DLL from the process address space andLoadLibrary returns NULL.
Wieso also, da die .NET Library keine DllMain Methode hat, liefert mir LoadLibrary ein gültiges Handle und nicht NULL?
Gibt es den DllMain Einstiegspunkt bei .NET Libraries wirklich? Wenn ja, kann ich den selbst auch benutzen, sodass ich direkt Aktionen ausführen kann wenn die Bibliothek geladen wird?
Dann bräuchte ich nämlich keine Exports sondern kann den GUI Kram von WPF erledigen und mittels unsafe die paar Eigenschaften die ich bearbeiten will direkt patchen.
Das alles funktioniert bisher super: Methode wird exportiert: Mittels LoadLibrary lade ich die Dll in C++, hab mir ein typedef gemacht welche die Signatur der Methode beschreibt, habe mit GetProcAddress den Export Address besorgt und kann die Methode einfach aufrufen. (Die Methode hat einen Pointer Parameter zu einer Options-Klasse).
In meiner C# Methode die dann aufgerufen wird, kann ich mit unsafe und dem Pointer zur Options-Klasse die Struktur nachbilden und dort weiterarbeiten.
Ich würde nur gern den technischen Hintergrund besser verstehen, wieso unmanaged c++, managed .NET bibiliotheken laden kann.
Grüße