Emulieren/Nachbau einer DLL
-
Hallo,
ich möchte eine DLL (zum Ansprechen einer bestimmten Hardware) emulieren, damit ich eine Software auch ohne Hardware testen kann. Ich kann eine DLL erzeugen, die mit dem Original-Headerfile eingebunden werden kann, allerdings sieht die entsprechende lib anders aus und ich muss die Software neu linken, wenn ich die DLL austausche. Ich habe schon mit verschiedensten Einstellungen beim Erzeugen der DLL herumprobiert, mir gelingt es aber nicht, eine DLL zu erstellen, die ich einfach 1:1 als Ersatz verwenden kann (ohne erneutes Linken). Was muss man beim Erstellen einer DLL alles beachten? Wie kann ich wirklich einen 1:1 Ersatz für eine vorgegebenen DLL erstellen?
danke,
Andy
-
Ok, inzwischen bin ich schon etwas schlauer geworden: meine DLL wurde mit "decorated names" erzeugt (der VC compiler hat z.B. aus CardFind den Funktionsnamen _CardFind@4 gemacht); das kann man mit der calling convention __cdecl abstellen. Nur bekomme ich dann bei einem anderen Programm eine Fehlermeldung über "invalid stack pointer". Offenbar betrifft __cdecl nicht nur den decorated name sondern auch die stack-Behandlung. Einen entsprechenden Hinweis habe ich in der VC-Doku gefunden. Was ich wohl bräuchte wäre die __stdcall convention ohne die Erzeugung eines dekorierten Namens. Gibt es so etwas?
danke,
Andy
-
extern "C".
Oder verwende eine DEF Datei...
-
Martin Richter schrieb:
extern "C"
ja, das verwende ich ohnehin. Das hat zwar etwas mit der Art und Weise zu tun, wie Namen dekoriert werden, aber nichts mit der calling convention (__cdecl oder __stdcall). Mit dem C++Builder und der calling convention __stdcall habe ich es jetzt hinbekommen, da der C++Builder die Namen nicht verändert ("dekoriert"), der VC bei __stdcall aber schon.
Martin Richter schrieb:
Oder verwende eine DEF Datei...
Ok, damit funktioniert es auch mit dem VC-Compiler. Einfach die Funktionsnamen auflisten, und schon lässt auch der VC seine defaultmäßige Dekoration sein. Danke für den Tipp!
Andy