Heim > Backend-Entwicklung > C++ > Hauptteil

Wie ändere ich den DLL-Suchpfad für statisch verknüpfte DLLs, wenn sich die DLL nicht im Anwendungsverzeichnis befindet?

Barbara Streisand
Freigeben: 2024-11-03 06:01:30
Original
592 Leute haben es durchsucht

How to Alter the DLL Search Path for Statically Linked DLLs When the DLL is Not in the Application Directory?

DLL-Suchpfad für statisch verknüpfte DLLs ändern

Dilemma:

Bei der statischen Verknüpfung von a Wenn Sie eine DLL zu einer Anwendung hinzufügen, sucht sie normalerweise im Verzeichnis der Anwendung nach der DLL. In bestimmten Szenarien befindet sich die DLL jedoch möglicherweise nicht im selben Verzeichnis. Es könnte sich beispielsweise in einem Unterordner befinden, der für „Plugins“ vorgesehen ist.

Mögliche Lösungen:

1. Dynamische Verknüpfung:

Erwägen Sie die Verwendung von LoadLibrary() und GetProcAddress() anstelle einer statischen Verknüpfung, um auf die Funktionalität des Plugins zuzugreifen. Dies gewährleistet eine größere Flexibilität beim Laden der DLL von ihrem vorgesehenen Speicherort.

2. Änderung der Umgebungsvariablen:

Durch Anhängen des Plugin-Ordnerpfads an die PATH-Umgebungsvariable des Systems wird sichergestellt, dass die DLL erfolgreich gefunden und geladen werden kann.

3. Verzögerungslademechanismus:

Verwenden Sie den Verzögerungslademechanismus, um das Laden der Plugin-Funktionalität zu verzögern. Implementieren Sie eine benutzerdefinierte Hilfsfunktion, die die DLLs mithilfe eines bereitgestellten Pfads lädt.

4. Assembly-Erstellung:

Transformieren Sie den Plugin-Ordner in eine Assembly, indem Sie darin eine .manifest-Datei generieren. Legen Sie den Ordner „plugins“ als abhängige Assembly innerhalb der Anwendung fest. Dadurch wird die DLL-Suche innerhalb des Plugin-Ordners gesteuert.

5. Stub-Anwendung und dynamisches Laden:

Unterteilen Sie die Anwendung in eine ausführbare Stub-Datei und eine dynamisch geladene Komponente. Verwenden Sie in der ausführbaren Stub-Datei SetDllDirectory, um den Plugin-Ordner anzugeben. Rufen Sie anschließend LoadLibrary auf und übergeben Sie dabei den vollständigen Pfad zur Datei „appstub.dll“.

Zusätzliche Tipps:

Einen Ordner in eine Assembly umwandeln:

Um ein Verzeichnis mit DLLs in eine Assembly umzuwandeln, fügen Sie dem Ordner eine Datei mit dem Namen „[Ordnername].manifest“ mit folgendem Inhalt hinzu:

<assembly manifestVersion="1.0">
  <assemblyIdentity type="Win32" name="Plugins" version="1.0.0.0" processorArchitecture="x86" />
  <file name="Plugin.dll"/>
</assembly>
Nach dem Login kopieren

Pragma-Direktive zum Laden von DLLs:

Verwenden Sie in Visual Studio 7 oder höher die folgende Pragma-Direktive, um Ihre Anwendung anzuweisen, DLLs aus der Assembly und nicht aus dem lokalen Verzeichnis abzurufen:

#pragma comment(linker, "/manifestdependency:\"name='Plugins' \
                         processorArchitecture='*' version='1.0.0.0' \
                         type='win32'\"")
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie ändere ich den DLL-Suchpfad für statisch verknüpfte DLLs, wenn sich die DLL nicht im Anwendungsverzeichnis befindet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage