Heim >Backend-Entwicklung >C++ >Können dynamische DLL-Pfade mit C#s DllImport verwendet werden?

Können dynamische DLL-Pfade mit C#s DllImport verwendet werden?

Barbara Streisand
Barbara StreisandOriginal
2025-01-15 20:15:43773Durchsuche

Can Dynamic DLL Paths Be Used with C#'s DllImport?

Unterstützt DllImport in C# dynamische Laufzeitpfade?

Bei Verwendung des DllImport-Attributs in C# müssen Sie normalerweise den Pfad zur DLL statisch angeben. Wenn der Installationspfad der Anwendung jedoch vom Benutzer abhängt (z. B. C:BenutzerBenutzername...), ist es nicht praktikabel, den absoluten Pfad fest zu codieren.

Traditionelle Methode

Trotz dieses Problems wird empfohlen, relative Pfade zu verwenden. Geben Sie nur den Namen der DLL an und das System sucht danach im Anwendungsverzeichnis und an anderen vordefinierten Speicherorten (gemäß den Windows-DLL-Laderichtlinien).

SetDllDirectory und P/Invoke

Wenn relative Pfade nicht Ihren Anforderungen entsprechen, sollten Sie die Verwendung der Funktion SetDllDirectory in Betracht ziehen. Mit dieser Funktion können Sie den Standard-DLL-Suchpfad zur Laufzeit ändern und so einen dynamischen Pfad angeben, der zu diesem Zeitpunkt berechnet wird.

Um SetDllDirectory zu verwenden, müssen Sie P/Invoke verwenden, da es sich um eine Windows-API-Funktion handelt. Hier ist die Aussage:

<code class="language-csharp">[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool SetDllDirectory(string lpPathName);</code>

Leistung

Ihr Code sollte etwa wie folgt aussehen:

<code class="language-csharp">SetDllDirectory(Path.GetTempPath() + "..\myLibFolder");

[DllImport("MyAppDll.dll")]
static extern bool MyGreatFunction(int myFirstParam, int mySecondParam);</code>

Dadurch wird der DLL-Suchpfad vor der Standardsuchreihenfolge des Systems an den Speicherort umgeleitet, der den Laufzeitzweig enthält.

Vorteile

Mit der Funktion SetDllDirectory können Sie den Laufzeitspeicherort einer DLL dynamisch angeben, ohne sich auf den Computer oder den Installationspfad des Benutzers verlassen zu müssen.

Das obige ist der detaillierte Inhalt vonKönnen dynamische DLL-Pfade mit C#s DllImport verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn