?
Hallo zusammen,
mein Problem ist gelöst. Soll heißen: King hat es gelöst! Riesigen Dank auch an dieser Stelle nochmal!
Vielen Dank auch Dir, "Irgendwer"! Es entspricht dem was Du geschrieben hast.
Für den Fall, daß nochmal jemand über dieses Problem stolpert und auf der Suche zufällig hier hinein gerät, schreibe ich hier noch eine kurze Zusammenfassung der Lösung:
Das Problem hat sich entpuppt als ein Fehler beim Exportieren. Ich hatte zwar die Aufrufkonvention "__stdcall" in den Projekt-Einstellungen korrekt angegeben, dies wirkte sich zwar richtig, jedoch nur auf den erstellten Code aus, nicht aber auf die exportierten Symbolnamen der Importbibliothek. Die Importbibliothek war "__cdecl"-like geblieben. Das hat sich aufgelöst, nachdem die Aufrufkonvention nochmal explizit zu jeder einzelnen Deklaration angegeben wurde und dann auch wieder "__declspec(dllexport)" zusammen mit "extern "C"" Anwendung gefunden hat. Zum Einbinden der dll kommt somit auch das dazugehörige "extern "C" __declspec(dllimport)" zum Zuge. Im übrigen konnte ich daraufhin auch auf Angabe des erweiterten Namens in der DEF-Datei verzichten (oder mußte es sogar?), was ein extra Zuckerl hierbei ist.
Fazit: Die Aufrufkonvention in den Projekt-Einstellungen (resp. Compiler-Switch) allein genügt nicht! Zumindest nicht in MS VC++ 6!
In Anlehnung an King und "Irgendwer" ergibt sich z.B. folgende Header-Datei:
#ifdef My_EXPORTS
#define DLL_IM_EXPORT dllexport
#else
#define DLL_IM_EXPORT dllimport
#endif
#define My_API(ret) extern "C" __declspec(DLL_IM_EXPORT) ret __stdcall
My_API(double) MyFunction(double P) ;
...
Viele Grüße,
Stefan.