DLL: Verzögertes Laden und Importe
-
Hi.
Wenn ich versuche, eine DLL verzögert zu laden, von der Sachen importiert werden müssen, funktioniert das ganze logischerweise nicht. Es kommt folgender Fehler:1>LINK : fatal error LNK1194: Verzögertes Laden von "python27.dll" aufgrund des Imports des Datensymbols "__imp__PyExc_SystemExit" nicht möglich. Link ohne /DELAYLOAD:python27.dll
Wie man sieht handelt es sich hier um Python. Das Problem entsteht nur unter Windows (MSVC 9.0 / 2008).
Gibt es eine Möglichkeit in den Projektoptionen einen "Searchpath" hinzuzufügen?
Ich könnte die python27.dll zwar in das gleiche Verzeichnis packen wie das Programm, aber das wäre meine letzte Option. Die DLL liegt 2 Verzeichnisse darüber, deshalb benutze ich momentan LoadLibrary.
Gruß und Danke
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Meines Wissens nach gibts keine Möglichkeit unter Windows einen entsprechenden LD_LIBRARY_PATH zu setzen.
-
Mir würde ganz spontan die aktuell in den Klatschspalten geisternde Sicherheitslücke einfallen. http://www.golem.de/1008/77546.html
Du müsstest demzufolge nur das Arbeitsverzeichnis entsprechend setzen. Ob sich das im Nachhinein noch manipulieren lässt kann ich dir aber nicht sagen.Und da haben wir es:
http://msdn.microsoft.com/en-us/library/aa365530%28VS.85%29.aspx
-
Hi.
Das was SetCurrentDirectory macht, kriege ich auch mit SetDllDirectory hin, was ich momentan auch benutze. Das funktioniert aber nur für verzögertes Laden. Wenn ich die DLLs sofort laden will (also ohne Verzögerung) wird das schon vor dem Ausführen von main() gemacht. D.h. ich habe gar keine Chance, SetCurrentDirectory oder SetDllDirectory auszuführen.Gruß
-
Die einfachste und meiner Meinung nach eleganteste Variante wäre das umkopieren der entsprechenden DLLs in das Verzeichnis. Dann bist du auch nicht davon anhängig, sollte sich an der Python-Installation etwas ändern.
-
Man kann das IMHO auch über Manifeste regeln...
-
Hi.
Danke für den Tipp mit den Manifesten, finden konnte ich darüber jedoch nichts.Mal eine weitere Frage. Wenn Programm A die python27.dll via LoadLibrary lädt und danach eine DLL X lädt, welche statisch gegen die python27.lib gelinkt ist, funktioniert dass dann automatisch, dass die python27.dll aus dem Memory benutzt wird? Also wäre es in der DLL nicht nötig, die Lib zu verzögern, richtig?
Gruß
-
Das mit den Manifesten funktioniert prinzipiell nur mit .NET Assemblies (probing pribvatePath):
http://msdn.microsoft.com/en-us/library/aa374182Mit unmanaged (native) Applikationen wollten sie es in Win7 reinmachen... ob MS es gemacht hat, hab ich aber nicht mehr verifiziert. Unter XP/Vista geht es auf jeden Fall nicht...