Domanda

Qual è il modo migliore per P / Invocare dinamicamente codice non gestito da .NET?

Ad esempio, ho un numero di DLL non gestite con comuni esportazioni in stile C tra di loro. Vorrei prendere il percorso di una DLL e quindi P / Invoke una funzione basata sul nome esportato. Non conoscerei il nome DLL fino al runtime.

In sostanza, qual è l'equivalente di LoadLibrary e GetProcAddress per .NET? (Ho un codice esistente che utilizza queste funzioni per raggiungere lo stesso obiettivo, interamente in codice non gestito).

È stato utile?

Soluzione

Questo articolo descrive un wrapper gestito typesafe per GetProcAddress che dovrebbe aiutarti.

http://blogs.msdn.com/ jmstall / archive / 2007/01/06 / Typesafe-GetProcAddress.aspx

Altri suggerimenti

Puoi farlo facendo P / Invocando LoadLibrary e GetProcAddress e quindi usando Marshal.GetDelegateForFunctionPointer .

Per i dettagli, consultare questo articolo .

Vedi anche questo post sul blog dal titolo Jonathan Swift che chiama dinamicamente una dll non gestita da .net

Un'opzione che hai è quella di creare una funzione nativa che è responsabile del caricamento della DLL e della funzione appropriate in memoria e quindi di restituire quella funzione al codice gestito in base al tuo percorso. In questo modo è possibile utilizzare il trucco GetProcAddress in modo naturale e restituire il punto funzione. È quindi possibile inserire PInvoke in questa funzione e recuperare un delegato che verrà quindi richiamato nella DLL corretta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top