Namensdekoration in DLL Borland vs. VC++
-
Hi,
Ich arbeite gerade an einem Projekt, dass Plugins unterstützen soll. Ich benutze zum "handling" des DLL-Zugriffs eine schmales opensource Template-Framework. Nun ist es so, dass das Framework eine Namensdekoration durchführt bevor es nach Funktionen in der DLL sucht. Wenn ich ein plugin mit VC++ kompiliere kann es ohne Probleme von der Hauptanwendung mittels Frameworkklassen geladen werden. Compiliere ich das selbe Plugin mit BCB 6.0 zu einer DLL, kann dieses nicht geladen werden. Das Symbol wird nicht in der DLL gefunden. Ich hab die DLL's mit einem Hexeditor verglichen und festgestellt, dass sie sich an einer Stelle, anscheinend wesentlich, unterscheiden.
Während die VC++ DLL einen Eintrag dummy.dll._plug_dummy@ (wobei dummy der Klassenname ist und plug_ ein von mir gewählter Präfix). In der Borland DLL gibt es einen ähnlichen Eintrag der allerdings folgendermaßen aussieht: dummy.dll.__CPPdebugHook.plug_dummyIch vermute nun dass es daran liegt wie Borland die Symbolnamen vergibt, weil die Framworkmethode class_exists(), die prüft ob eine Klasse vorhanden ist bei geladener Borland DLL false und bei geladener VC++ DLL true zurück gibt.
Ich hab nun 2 Fragen. 1) Hat es wirklich damit zu tun ? und 2) Wie bringe ich den BCB dazu mir eine VC++ konforme DLL zu compilieren oder kann ich den Frameworkcode entsprechend anpassen ?
Ich möchte ungern die plugins mit VC++ entwickeln da ich vcl-Komponenten verwenden möchte.
Thx so far ...