Laden einer VC7.1-DLL mit Hilfe eines VC9-Programms

07/07/2008 - 11:36 von Inez Störzer | Report spam
Ich habe folgendes Szenario: Es gibt ein Programm, das mit VC++ 9 erstellt
wurde und aus dem heraus mit LoadLibraryEx eine DLL geladen wird, die mit
VC++ 7.1 kompiliert wurde (Test710.dll ist die VC++ 7.1-DLL):

HINSTANCE hDLL2 = LoadLibraryEx ("D:\\Test\\Test710.dll", NULL,
DONT_RESOLVE_DLL_REFERENCES);

Die DLL làdt auch ganz ordentlich die benötigte VC7-Laufzeitumgebung mit.

Alles klappt im Prinzip prima bis auf ein Problem: Eine Funktion, die aus
ArchivACL610.dll aufgerufen wird, verwendet intern die Anweisung
BeginWaitCursor(). Und genau an dieser Stelle bekomme ich dann eine access
violation.

Die Funktion selbst wird folgendermaßen aufgerufen:
PFktTest pTest = (PFktTest) GetProcAddress(hDLL, "Test");
int iRet = pTest(pOut1, pcPfad, &pcOrdBegriffe1);

Wenn ich die BeginWaitCursor-Anweisung herausnehme, klappt alles. Das
Problem ist, dass das VC9-Programm auch mit bereits ausgelieferten VC7-DLLs
mit BeginWaitCursor zusammenarbeiten sollte, da diese nicht upgedated werden
können.

Hat jemand eine Idee, wie man das Problem lösen könnte? Vielen Dank im voraus!
 

Lesen sie die antworten

#1 SvenC
07/07/2008 - 12:03 | Warnen spam
Hallo Inez,

Alles klappt im Prinzip prima bis auf ein Problem: Eine Funktion, die
aus ArchivACL610.dll aufgerufen wird, verwendet intern die Anweisung
BeginWaitCursor(). Und genau an dieser Stelle bekomme ich dann eine
access violation.

Die Funktion selbst wird folgendermaßen aufgerufen:
PFktTest pTest = (PFktTest) GetProcAddress(hDLL, "Test");
int iRet = pTest(pOut1, pcPfad, &pcOrdBegriffe1);



Was sind denn die Parameter für Datentypen? Du kannst keine MFC-
Klassen zwischen verschiedenen MFC-Versionen austauschen. D.h.
Parameter vom Typ CWnd, CString usw. sind tabu.

Exportierte Funktionen, die MFC nutzen, sollten mit
AFX_MANAGE_STATE(AfxGetStaticModuleState());
als erste Zeile der Funktion anfangen. Ist das bei Dir der Fall?

SvenC

Ähnliche fragen