2009-07-29 17 views
7

Qual è il modo migliore per eseguire dinamicamente il codice non gestito P/Invoke da .NET?Dinamicamente P/Richiamare una DLL

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

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

risposta

0

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

2

vedere anche this post sul blog dal titolo Jonathan Swift dinamicamente chiamando una DLL non gestita da .NET