Das verzögerte Laden von opengl32.dll schlägt mit Qt5 fehl

8

Ich muss OpenGL Version 2 Funktionen in einem Qt5 Projekt unter Windows 7 verwenden (Qt ist mit Desktop OpenGL nicht ANGLE erstellt). Um das Ausführen der Anwendung über Remote Desktop zu unterstützen, möchte ich bei Bedarf auf das Software-Rendering via Mesa zurückgreifen. Mein Plan ist, die OpenGl-Version beim Start zu überprüfen. Wenn es zu niedrig ist, setze ich ein Flag in den Anwendungseinstellungen, drucke eine Nachricht und beende das Programm. Wenn das Programm erneut gestartet wird, kann ich das Flag lesen und entscheiden, ob ich die Opengl32.dll von Mesa anstelle von Windows 'Builtin-Version laden muss.

Um das zu erreichen, habe ich versucht, opengl32.dll zu laden, indem ich das /DELAYLOAD:opengl32.dll Linker-Flag gesetzt habe und dann SetDllDierectoryW([path to dir with Mesa's opengl32.dll]) benutzt habe, um die DLL-Suche umzuleiten. Leider funktioniert das nicht, da die eingebaute Version von opengl32.dll bereits nach dem Eingeben von main() im Speicher ist und somit SetDllDirectory keine Wirkung hat.

Dependency Walker zeigt mir, dass Qt5Gui.dll selbst mit opengl32.dll verknüpft ist und ich vermute, dass dies das Laden der Verzögerung unterminiert. Aber wenn ich versuche, auch Qt5Gui.dll zu verzögern, schlägt der Linker aufgrund eines importierten Symbols "__declspec(dllimport) public: static struct QMetaObject const QWindow::staticMetaObject" (__imp_?staticMetaObject@QWindow@@2UQMetaObject@@B) fehl. Ich habe keine Ahnung, wie ich das loswerden soll.

Ich brauche OpenGL 2 wirklich, daher scheint es keinen Sinn zu haben, Mesa für das Software-Rendering zu verwenden. Aber ich konnte auch keine Alternative zum verzögerten Laden finden. Das Ändern der PATH-Einstellungen, wann immer ich zwischen Hardware- und Software-Rendering wechseln möchte, scheint nicht zu funktionieren, und das Umschalten durch Verschieben von opengl32.dll in oder aus dem Anwendungsverzeichnis ist keine Option, da ein normaler Benutzer nicht den erforderlichen Schreibzugriff haben sollte Berechtigungen.

Gibt es eine Möglichkeit, das Laden von opengl32.dll mit Qt5 zu verzögern?

    
Matthias Zilk 02.03.2014, 21:05
quelle

1 Antwort

1

Qt5Gui selbst ist mit OpenGL verknüpft. Wenn Ihre Anwendung diese Bibliothek lazy laden kann, können Sie versuchen, QCoreApplication :: setLibraryPaths () ohne Systempfade aufzurufen und stattdessen Pfade für Ihre Bibliotheken zu verwenden.

Abgesehen davon können Sie Ihre Datei qt.conf optimieren. Lesen Sie hier darüber nach: Ссылка

    
Garrappachc 17.08.2014 20:12
quelle

Tags und Links