Dynamisch P / Aufrufen einer DLL
Frage
Was ist der beste Weg, um dynamisch P / Invoke nicht verwalteten Code von .NET?
Zum Beispiel habe ich eine Reihe von nicht verwalteten DLL mit gemeinsamem C-Stil Exporten zwischen ihnen. Ich möchte den Pfad zu einer DLL nehmen und dann P / Invoke eine Funktion auf den exportierten Namen basiert. Ich würde den DLL-Namen erst zur Laufzeit kennen.
Im Grunde, was ist das Äquivalent von LoadLibrary
und GetProcAddress
für .NET? (Ich habe eine vorhandenen Code, der diese Funktionen verwendet das gleiche Ziel zu erreichen, vollständig in nicht verwalteten Code).
Lösung
Dieser Artikel beschreibt eine typsichere verwalteten Wrapper für GetProcAddress, die Ihnen helfen sollen.
http://blogs.msdn.com/ jmstall / Archiv / 2007/01/06 / Typesafe-GetProcAddress.aspx
Andere Tipps
Sie können dies tun, indem P / Aufrufe in Loadlibrary und GetProcAddress, und dann mit Marshal.GetDelegateForFunctionPointer .
Weitere Informationen finden Sie unter diesem Artikel .
Eine Option, die Sie haben, ist eine native Funktion zu schaffen, die für das Laden des entsprechenden DLL und Funktion in dem Speicher verantwortlich ist und dann diese Funktion zu verwalteten Code auf Ihrem Weg auf Basis zurückkehren. Auf diese Weise können Sie den GetProcAddress Trick natürlich verwenden und die Funktion zurückkommen. Anschließend können Sie PInvoke in dieser Funktion und einen Delegierten zurück, die dann in die richtige DLL aufrufen wird.