Diese " alle anderen (nicht-Qt-Plugin-) DLLs " sind das Plugins oder nur einfache Dlls ?
also nur funktionsbiblotheken, oder wirklich welche (mit nicht QT abhaengigen) eigenen Plugin mechanismuss.
Wenn es sich um einfache Dll's handelt, also solche die dan mit der importlib "zugelinkt" werden, ist die frage ob es wirklich "sinn" macht, die aus dem App verzeichniss rauszubekommen.
Zum hintergrund:
LoadLibrary("xxx.dll") verhaelt sich konform zu "sicherheitsstandard" von windows.
dabei ist gewahrleistet, dass wenn in der exe die dll angezogen wird, immer zuerst die aus dem verzeichniss der exe genommen wird, dann erst an anderen stellen gesucht wird. Das hat was mit sicherheit zu tun .... Wennn du zu deiner exe die dll auslieferst, und ins gleiche verzeichniss pappst, wird die dll immer passen.
Auf den pfad hasst du weniger einfluss ... und du solltest den auch nicht nur auf "..\bin" setzen, sondern um das erweitern. aber weisst du was vorher drinne steht ?
weiterhin kannst du per Regestry die suchreihenfolge umschalten .... ob die pathvariable vor den system verzeichnissen vorrang hat oder nicht ....
Das nur zur warnung, wenn die dll's wirklich nur von deinem prog gebraucht wird ... sollt es aber kein problem machen.
Alternative waere die dll nicht von der importlib anziehen zu lassen, sondern selber laden .... macht bissi mehr arbeit. dafuer kannst aber genau angeben wo die liegt dann.
nein, statisch lokale variablen werden eigentlich initialisiert, wenn sie das erste mal verwendet werden.statische Variablen in main.cpp müssten ja zuerst ausgewertet werden
globale variablen werden vor dem main() initialisiert.
Dein problem ist aber, wenn die import libs das so machen, ist zwar definiert, das die variable in reihenfolge ihrer deklaration innerhalb einer datei initialisiert werden, aber nicht, in welcher reihenfolge die dateien "abgearbeitet" werden.
Sobald du die reihenfolge von den globalen Variablen in unterschiedlichen uebersetzungseinheiten beeinflussen willst, wird alles sehr compilerspezifisch.
Beim gcc (mingw) kenn ich mich damit ned soo genau aus ....
und bevor ich mit sowas anfangen wuerd (auch wenns beim VC relativ einfach ist) wuerd ich andere dinge versuchen .....
Das ist die runtime fuer den gcc .... als entwickler kann man es sich da einfacher machen und sagen die mingw runtime muss installiert sein (ins system32 kopieren lassen) doof nur wenn user das programm nutzen sollen, die keine admin rechte haben .....dadurch wird wohl die mingwm10.dll immer im Programmverzeichnis liegen müssen
viel andere moeglichkeiten hasst da eh ned, da die runtime ziemlich rudimentaer ist, ohne der kannst eh gar nix manipulieren. Also entweder ins system32, oder neben die exe legen.
btw, das selbe problem haben VC entwickler auch .... die VC runtime braucht man auch..... aber dafuer liefert M$ nen eigenen installer, bzw bei den service packs wird das ding mit installiert .... alternativ kann man das ding auch anderswo hinpacken, und das ganze ueber nen manifest steuern.
Alternativ, statisch dazulinken ... kann man zumindest beim VC, damit kann man einfache konsolenproggies schreiben, die keinerlei dll anziehen .... beim gcc sollt das auch gehen. DIe exe wird dann nur ewtas groesser.
Alle anderen Dll's kannst austricksen, indem die abhaengigkeiten selber und damit deinen ganzen code in ne dll verlagerst, zu der dll die importbibs linken .... und bevor deine dll aufrufst (mit loadlibrary), deine PATH variable umsetzen ....
ne noch einfachere alternative, in deinem root verzeichniss eine exe, die auf ne andere exe in deinem /bin verzeichnis nen systemcall macht.
Musst aber auch dementsprechend absichern, weil der pure systemcall halt unsicher ist.
Geht natuerlich auch mit createProcess, dort kannst aber die Enviroment variablen sogar genau festlegen die mitgegeben werden ....
Ciao ....