Qt-DLL-Implementierung auf Windows
Habe ich ein Plug-in für eine Anwendung von einem anderen Unternehmen. Mein plug-in verwendet die Qt so muss es die Qt-DLLs. Mein problem ist, dass alle Versionen von 4.x Qt-Dlls aufgerufen werden, die gleichen, z.B. :QtCore4.dll. Es ist durchaus möglich, dass einige andere plugin, oder eine andere Anwendung eingefügt, die sich in der PATH-Umgebungsvariable gesetzt hat, die Qt-dlls in den Ordner "Anwendungen". In diesem Fall, das plug-in wird nicht gestartet, als es erwartet wird, eine andere version der DLL.
- Q1. Was ist die empfohlene common Praxis für DLL-Bereitstellung ?
- Q2. Was ist, wenn die host-Anwendung verwendet eine andere version von Qt. Würde windows erlauben die host-Anwendung und dem plug-in die Verwendung der verschiedenen Versionen () ?
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
A1: Best practice: legen Sie die DLL in das Verzeichnis der ausführbaren Datei. Es wird sich dort zuerst für das laden der DLL. Das ist gängige Praxis.
A2: Wenn irgendwie die Anwendung verwendet eine andere version von Qt und das Modul, Sie describint erfordert eine neuere oder spezielle version, könnte es ein problem verursachen (funktioniert nicht, Absturz, etc).
Mit statischer Verlinkung würden Sie müssen auch Bedenken, Einschränkungen der Lizenz von Qt. LGPL ist glücklich, solange die Bibliothek wird dynamisch zur Laufzeit geladen und kann von der Anwendung getrennt. Dies gilt nur, wenn Sie nicht lassen Sie Ihre Quelle, etc.
Auch, Ihr Installateur sollte den Zugriff auf diese Dateien, so dass Sie geschützt sind, nicht überschrieben werden von einigen anderen Schurken-Anwendung.
Nur, um anderen zu helfen mit diesem problem:
Die QT-DLL ' s sind garantiert die gleichen (oder zumindest Binär-kompatibel) für alle 4.X-Versionen. (gleich für alle 3.X-Versionen und so weiter), so wird es kein Problem sein. Dies ist auch der Grund, warum es keine zweite Zahl in der Qt-dll-Namen.
Mit Windows-Versionen seit XP (also XP, 2003, Vista, 2008, Win7) verwenden, können Sie die side-by-side-Baugruppen oder Die DLL-Umleitung. In beiden Fällen im wesentlichen, was Sie tun, ist darunter eine kleine text-Datei, wodurch das Betriebssystem, das Sie verwenden müssen, um die spezifische version der DLLs, die Sie enthalten, in demselben Verzeichnis wie die ausführbare Datei.
Diese sind weniger bekannte Funktionen, aber Sie kann wirklich sparen Sie Ihre Hintern von "DLL-Hölle".
Gibt es keine Möglichkeit, zu wählen, um link statisch mit Qt?
Ich würde mich bereitstellen, die DLLs im selben Verzeichnis wie meine app/plugin.
Diese keine Antwort auf Ihre anderen Anliegen aber.
Wie Tim sagte, Sie sollten implementieren Sie die DLL in das gleiche Verzeichnis wie die app/plugin, die Sie machen. Ich glaube, dass die PATH-variable ist nicht der erste Platz Ihr Programm Aussehen wird für die QT4-dll, also, wenn Sie es bereitstellen, in die gleichen Ordner Ihrer app zu Holen die einen mit Ihrer app und ignorieren alle, die auf dem WEG sind.
Q1: In der Vergangenheit schien es wie jeder warf Ihre DLLs in das system32-Ordner, da Sie wusste, es war auf dem WEG und wusste, dass es das Programm wäre in der Lage, es zu finden. Aus user-Sicht finde ich das sehr schwer zu säubern, wenn ich Sie deinstallieren möchten etwas. Und jetzt mit dem kleinen Preis des storage würde ich sagen, halten Sie Ihre DLLs mit Ihrer app vor allem, wenn Sie so sind, wo kann es mehrere Versionen. Während ich bin kein Experte, dies ist, wie ich handle jar-Dateien für Java-Anwendungen.
Q2: ich würde so denken. Es würde davon abhängen, die Verzeichnis-Struktur von app und plugin. Man kann sagen, dass Ihr plugin die version zu verwenden, und ich bin bereit zu Wetten, dass das app hat die version in einem besonderen Ort bereits als gut.
Zur Sicherheit müssen Sie sicherstellen, dass die Anwendung die dll-Versionen, die Sie wollen, es zu benutzen. Windows ist garantiert ein Blick in den application-Ordner zuerst. So schreiben Sie dort alle Ihre binären Abhängigkeiten.
Wenn Ihre app nicht ausgeführt, wenn Sie auf ihn doppelklicken im explorer-Fenster wird Ihnen sagen, welche dll, die Sie braucht. Kopieren Sie diese dll in den Ordner der Anwendung. Gehen Sie zum nächsten Schritt, wenn die Anwendung ausgeführt wird.
Nun sollten Sie vorübergehend entfernen (oder umbenennen) die dll ' s eins nach dem anderen, dass Sie in den application-Ordner und jedes mal, wenn Sie einen Doppelklick auf Ihre Bewerbung. Wenn sich Windows nicht beschweren, es fand die dll irgendwo anders. Erhalten, dass die dll aus dem PFAD Umwelt (möglicherweise vorübergehend). Rapid Environment Editor ist ein kostenloses Hilfsprogramm, mit änderungen von Umgebungsvariablen, die sofort wirksam werden.
Nur, wenn Sie sicher sind, dass Ihre Anwendung die dll in die Anwendung dir und zieht nicht in irgendeine dll von woanders können Sie beginnen, Bearbeiten Sie die variable PATH, um wieder die alte situation.