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).

War es hilfreich?

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 .

Siehe auch dieses Blog-Post von Jonathan Swift Titel dynamisch eine nicht verwaltete dLL aus .net

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top