Question

Quel est le meilleur moyen de dynamiser le code P / Invoke non managé à partir de .NET?

Par exemple, j'ai un certain nombre de DLL non gérées avec des exportations communes de style C entre elles. Je voudrais prendre le chemin à une DLL et ensuite P / Invoke une fonction basée sur le nom exporté. Je ne connais pas le nom de la DLL avant l'exécution.

En gros, quel est l'équivalent de LoadLibrary et de GetProcAddress pour .NET? (J'ai un code existant qui utilise ces fonctions pour atteindre le même objectif, entièrement en code non managé).

Était-ce utile?

La solution

Cet article décrit un wrapper géré par Typesafe pour GetProcAddress qui devrait vous aider.

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

Autres conseils

Vous pouvez le faire en invoquant P / dans LoadLibrary et GetProcAddress, puis en utilisant Marshal.GetDelegateForFunctionPointer .

Pour plus de détails, consultez cet article .

Voir aussi ce billet de blog de Jonathan Swift titre Appelant dynamiquement une dll non gérée à partir de .net

Une option possible consiste à créer une fonction native chargée de charger en mémoire la DLL et la fonction appropriées, puis de renvoyer cette fonction au code géré en fonction de votre chemin. De cette façon, vous pouvez utiliser l'astuce GetProcAddress naturellement et renvoyer le point de fonction. Vous pouvez ensuite PInvoke dans cette fonction et récupérer un délégué qui sera ensuite appelé dans la DLL appropriée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top