LoadLibrary und GetProcAddress, wann wird die Library verschoben?

02/03/2009 - 14:22 von Edzard Egberts | Report spam
Hallo,

ich habe hier einen ganzen Haufen Fremdcode, bei dem DLLs mit
LoadLibrary() dynamisch geladen und mit GetProcAddress() Funktionszeiger
belegt werden. Beim Versuch mehrere von diesen Klassen zu verwenden, ist
das direkt schief gegangen, weil die Funktionszeiger ungültig wurden. So
weit ich mich erinnere, kann es passieren, dass DLLs nach dem Laden noch
einmal im Speicher verschoben werden und man sollte deshalb keine
Funktionszeiger verwenden, sondern GetProcAdress() bei jedem
Funktionsaufruf verwenden. Den ganzen Code zu verwursten war mir aber zu
blöd, deshalb habe ich das einfach statisch gelinkt und es funktioniert.

Jetzt frage ich mich aber doch, ob dieser ganze Haufen Fremdcode
tatsàchlich Müll ist, oder ob ich da etwas übersehen habe und die
Zuordnung an Funktionszeiger unter bestimmten Bedingungen doch zulàssig
ist. Mich wundert nàmlich, dass ich in der MSDN zu diesem Thema keine
Remarks finde, das müsste doch erwàhnt werden? Habe ich da etwas übersehen?

Gruß,

Ed
 

Lesen sie die antworten

#1 Markus Schaaf
02/03/2009 - 20:00 | Warnen spam
Edzard Egberts schrieb:

ich habe hier einen ganzen Haufen Fremdcode, bei dem DLLs mit
LoadLibrary() dynamisch geladen und mit GetProcAddress() Funktionszeiger
belegt werden. Beim Versuch mehrere von diesen Klassen zu verwenden, ist
das direkt schief gegangen, weil die Funktionszeiger ungültig wurden. So
weit ich mich erinnere, kann es passieren, dass DLLs nach dem Laden noch
einmal im Speicher verschoben werden und man sollte deshalb keine
Funktionszeiger verwenden, sondern GetProcAdress() bei jedem
Funktionsaufruf verwenden.



Das ist absurd. Das Problem wird eher gewesen sein, dass diese Library
vorzeitig entladen wurde (falls sie überhaupt jemals erfolgreich gemappt
werden konnte).

Ähnliche fragen