P/Invoke-dynamic DLL-Suchpfad

Habe ich eine vorhandene app, die P/Ruft eine DLL die sich im gleichen Verzeichnis wie die app selbst.

Nun (aufgrund der Tatsache, dass Canon stellt einen der crappiest API ' s Rum) brauche ich zur Unterstützung zwei Versionen dieser API und ermitteln Sie zur Laufzeit die ich verwenden soll (alt oder neu). Da die DLLs mit dem gleichen Namen (der erste lädt andere DLLs mit dem gleichen Namen, so dass nur die Umbenennung der erste wird mir nicht helfen) ich muss halten Sie Sie in verschiedenen Verzeichnissen.

Daher meine Frage: welche Möglichkeiten habe ich, zu kontrollieren, in welchem Verzeichnis die DLL in ein DllImport-Deklaration verwendet?

Denke ich, kann ich beginnen, indem Sie versuchen, eine dieser beiden Ideen:

1) Verwenden Sie "SetDllDirectory", um meine gewünschten Verzeichnis, bevor Sie die erste P/Invoke und dann setzen Sie es anschließend wieder ein.

2) Laden Sie die gewünschte DLL manuell mithilfe von "LoadLibraryEx" und hoffe, dass das den trick tun.

Aber gibt es auch mehr ".NET:isch Weg" als erstes ausprobieren?

UPDATE: ich merke, dass ich Sachen, die alle Zugriff auf die DLLs in zwei getrennten .Net-Assemblys und dann legen Sie Sie in einem separaten Verzeichnis mit der entsprechenden API-Dateien. Dann kann ich laden Sie die richtige .Net-assembly dynamisch und laden Sie die richtige DLL sollte das automatisch passieren. Irgendeinem Grund nicht funktionieren sollte?

Kann ich denken: wie würde ich mich über das Debuggen dieses Zeug? Es ist möglich zu sagen, Visual Studio, dass die Montage (enthalten in meiner Lösung) werden in einem Unterverzeichnis und Debuggen von dort?

InformationsquelleAutor Dan Byström | 2010-03-09
Schreibe einen Kommentar