Spécifiez le chemin d'importation des DLL multiplateformes lors de l'exécution en C#
Lors de l'intégration de DLL C externes dans un projet C#, il peut être difficile d'aller au-delà des valeurs définies statiquement pour personnaliser le chemin d'importation de la DLL. Cet article aborde ce problème, en se concentrant spécifiquement sur la spécification des chemins d’importation au moment de l’exécution.
Bien que l'utilisation de l'attribut DllImport
soit toujours la méthode préférée, elle nécessite que le répertoire DLL utilise des arguments de chaîne constants, ce qui constitue une limitation. Cette rigidité peut constituer un obstacle dans les situations où l'emplacement de la DLL peut varier selon les différents environnements utilisateur.
Solution utilisant un chemin relatif
Contrairement aux idées reçues, DllImport
les propriétés sont toujours disponibles. Plutôt que de s'appuyer sur des chemins absolus, spécifier le chemin relatif vers la DLL résoudra le problème. L'ordre de recherche par défaut des DLL inclut le répertoire de l'application, garantissant ainsi que la DLL est trouvée lors de l'installation.
Utiliser SetDllDirectory
Si les chemins relatifs ne fonctionnent pas ou si vous devez personnaliser dynamiquement le chemin, vous pouvez utiliser la fonction SetDllDirectory
. L'appel de cette fonction avant d'accéder aux fonctions DLL importées permet de modifier le chemin de recherche par défaut des DLL.
Instruction P/Invoke de SetDllDirectory
Pour utiliser SetDllDirectory
, effectuez l'importation P/Invoke suivante :
<code class="language-csharp">[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool SetDllDirectory(string lpPathName);</code>
Le chemin de recherche de la DLL peut être ajusté au moment de l'exécution en définissant dynamiquement le paramètre lpPathName
.
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!