10
votes

Dynamiquement p / invoquant une DLL

Quel est le meilleur moyen de dynamiquement p / invoquer le code non géré de .net?

Par exemple, j'ai un certain nombre de DLL non gérées avec des exportations communes de style C entre eux. Je voudrais prendre la voie à une DLL, puis p / invoquer une fonction basée sur le nom exporté. Je ne connais pas le nom de la DLL tant que le temps d'exécution.

Fondamentalement, quel est l'équivalent de loadlibrary et getProcAddress pour .NET? (J'ai le code existant qui utilise ces fonctions pour accomplir le même objectif, entièrement dans le code non géré).


0 commentaires

4 Réponses :


0
votes

Une option que vous avez consiste à créer une fonction native responsable du chargement de la DLL appropriée et de la fonction dans la mémoire, puis de renvoyer cette fonction au code géré en fonction de votre chemin. De cette façon, vous pouvez utiliser le tour GetProcAddress naturellement et renvoyer le point de fonction. Vous pouvez ensuite cligner dans cette fonction et récupérer un délégué qui invoquera ensuite dans la DLL appropriée.


0 commentaires

3
votes

Vous pouvez le faire par p / invoquant dans LoadLibrary et GetProcAddress, puis en utilisant Marshal.getDelegatefunctionPointer .

Pour plus de détails, voir Cet article .


0 commentaires

5
votes

Cet article décrit une enveloppe gérée typique pour GetProcAddress qui devrait vous aider.

HTTPS: / /docs.microsoft.com/en-us/archive/blogs/jmstall/type-safe-managed-wrappers-for-kernel32getProcaddress


0 commentaires

2
votes

Voir aussi Ce Poste de blog de Jonathan Swift Titre appelle de manière dynamique une DLL non gérée de .NET


0 commentaires