Maison >développement back-end >C++ >Comment puis-je spécifier dynamiquement un chemin DllImport en C# ?

Comment puis-je spécifier dynamiquement un chemin DllImport en C# ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-15 20:29:44623parcourir

How Can I Specify a DllImport Path Dynamically in 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 :

  1. Le répertoire de l'application.
  2. Le répertoire système.
  3. Le répertoire système 16 bits.
  4. Le répertoire Windows.
  5. Le répertoire actuel.
  6. Répertoires répertoriés dans la variable d'environnement 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn