[DLL] Dll für alle
-
Hi,
ich hatte letztens ein Problem mit meiner selbstgestrickten Dll. Aufgrund meiner Einstellung zur Kodeerstellung im VC8 konnte ich meine eigene DLL nicht mehr in meinen anderen Projekten verwenden. Das warf die Frage auf, inwieweit man überhaupt sprachübergreifende Dlls schreiben kann, wenn ich's nicht mal mit einer Sprache schaffe.

Nach ein bissl suchen hab ich dann folgende Anforferungen gefunden, zu den ich noch Fragen habe:
- extern "C" verwenden
- C - Schnittstelle
- __stdcall verwenden (für bestimmte Sprachen)Punkt C-Schnittstelle heisst für mich als C-Unwissender keine Referenzen, keine Klassen, keine Templates und keine Fkt. innhalb von Strukturen. Was gibt's da für C++-Programmierer zu beachten?

Zu den Aufrufkonventionen: Die scheinen sich von Sprache zu Sprache zu unterscheiden. So will z.B. Blitzbasic __cdecl, aber VB __stdcall (lt. Forum), also kann man keine allgemeine Lösung finden. Mich interessieren als Clients die Sprachen C# und Delphi. Welche Aufrufkonventionen benötigen C# und Delphi?
<edit>
Bie meiner DLL hatte ich bei der DLL und bei dem Client eine unterschiedliche Runtime Library eingestellt. Kann man DLL unabhähgig von der benutzen RTL erstellen, so dass nicht alle Clients die selbe RTL verwenden müssen?
</edit>Danke für Antworten und Hinweise,
don_basto.
-
Delphi ist Turbo Pascal und das hat __pascal als Aufrufkonvention, also die Parameter werden von Links nach Rechts auf den Stack gepushed.
-
Der Zugriff auf __stdcall - definierte DLL-Funktionen wird von fast allen Windows-Entwicklungssystemen irgendwie unterstützt.
Es gibt natürlich noch ein paar Sachen beim Entwurf der Schnittstelle:
- Speicher der im DLL alloziert wird, muß auhc im DLL wieder freigegeben werden
- Andersrum darf kein Speicher des Aufrufers im DLL freigegeben werden
- Das Name Mangling des Compilers mit extern "C" oder über -def - File unterdrücken
- usw.