R
I've fixed it!
Ja, ja, so kann's geh'n. Wer lesen kann, ist klar im Vorteil!
Wie ich bereits im ersten Beitrag schrieb, ist der Quelltext der DLL sowohl für den VC 6 als auch für den BCB 5 identisch (mit einigen Präprozessorderektiven funktioniert das). Dadurch war auch der Einsprungpunkt für die DLL identisch. Bisher war die DLL im VC-Stil erstellt worden und hatte DllMain() als Einsprungpunkt. Das habe ich jetzt wie folgt geändert:
/////////////////////////////////////////////////////////////////////////////
// Einsprungpunkt fuer die DLL-Anwendung
#ifdef MS_VC_6_0
BOOL APIENTRY DllMain(HANDLE hModule, DWORD reason, LPVOID lpReserved){
#else
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved){
#endif
switch (reason){ // wird beim Laden und Entladen durchlaufen
case DLL_PROCESS_ATTACH: break;
case DLL_THREAD_ATTACH: break;
case DLL_THREAD_DETACH: break;
case DLL_PROCESS_DETACH: break;
}
return true;
}
Nach erneutem Kompileren und Ausführen der Anwendung bekam ich dann folgende Fehlermeldung: "Zugriffsverletzung bei Adresse 41004496 in Modul 'BORLNDMM.DLL'. Schreiben von Adresse 70614307." Danach las ich den "wichtigen Hinweis", der bei der Erstellung einer DLL mit dem DLL-Experten erzeugt wird. Dort stand, dass man, wenn man denn die statische Version der RTL verwendet, MEMMGR.LIB explizit sowohl in das DLL-Projekt als auch in das exe-Projekt oder aber eben die RTL.DLL mit einbinden muss.
So setzte ich also das Häkchen unter "Projektoptionen/Linker" im Kontrollkästchen "Dynamische RTL verwenden". Und siehe da, es funktioniert.
Wie doch ein kleines Häkchen die Welt verändern kann
Vielen Dank an alle, die sich damit beschäftigt haben.
Gruß RastowMax