Maison >développement back-end >C++ >Comment puis-je spécifier dynamiquement un chemin DllImport en C# ?
Chargement dynamique de DLL en C# à l'aide de DllImport
L'attribut DllImport
en C# simplifie l'intégration avec les fonctions DLL natives. Cependant, son exigence d'un chemin de chaîne constant présente des défis lorsque l'emplacement de la DLL peut varier selon les systèmes. Cet article explore des solutions pour spécifier dynamiquement le chemin de la DLL au moment de l'exécution.
Le défi des chemins relatifs avec DllImport
En utilisant un chemin relatif directement dans l'attribut DllImport
, comme ceci :
<code class="language-csharp">[DllImport("myLibFolder\myDLL.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int DLLFunction(int Number1, int Number2);</code>
échoue parce que DllImport
a besoin d'une chaîne littérale. Cela pose des problèmes de déploiement, où l'emplacement de la DLL peut changer.
Approche recommandée : exploiter l'ordre de recherche de DLL par défaut
La solution la plus efficace consiste à placer stratégiquement la DLL et à utiliser l'ordre de recherche des DLL Windows. Cette commande donne la priorité aux emplacements suivants :
PATH
.L'installation de la DLL dans le répertoire de l'application garantit qu'elle sera trouvée de manière fiable pendant l'exécution.
Alternative : ajustement dynamique du chemin avec SetDllDirectory
Si l'ordre de recherche par défaut s'avère insuffisant, la fonction SetDllDirectory
propose une solution dynamique. Cette fonction Win32 vous permet de modifier le chemin de recherche des DLL au moment de l'exécution. Voici la déclaration P/Invoke :
<code class="language-csharp">[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool SetDllDirectory(string lpPathName);</code>
Appelez SetDllDirectory
avant votre premier appel de fonction DLL pour ajouter temporairement le répertoire souhaité au chemin de recherche. Cela fournit un moyen flexible de gérer différents emplacements de DLL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!