Hallo,
[...] Eine in Assembler/Delphi/VB geschriebene DLL hätte die gleiche Schnittstelle.
Nicht zwangsläufig.
Äh, doch. *fingerhochzeig*
Moooment. ;-)
Im Falle der C++-Bibliothek werden also (da man C++-Bibliotheken Funktionen überladen kann, in C-Bibliotheken nicht) noch Typinformationen an den Funktionsnamen angehängt, im Fall der C-Bibliothek nicht.
Ja, das ist richtig - wobei mir neu wäre, dass das mit dem Überladen zu tun hat, aber das lasse ich mal dahingestellt. Ich hatte nämlich bisher _gar_ keine Erklärung dafür. ;-)
Die Schnittstelle, die eine Bibliothek besitzt, ist also auch von der Programmiersprache abhängig.
Nein, die Schnittstelle ist vom Rest der Applikation und vom Betreibssystem abhängig, mit dem diese Applikation interagieren muss. Durch das "Name Mangling" sind die Bezeichner von C++ nicht mehr kompatibel mit denen von in anderen Sprachen geschriebenen Modulen. Deswegen muss man C++-Bezeichner, dier mit dem "Rest der Welt" gelinkt werden sollen, mit der Direktive extern "C" { ... } vom Name Mangling ausnehmen, damit sie wieder zum Schema passen (dasselbe gilt für externe Bezeichner, die man von C++ aus referenzieren möchte).
Natürlich gibt es bestimmte Konventionen, die eine Bibliothek auf einem bestimmten Betriebsystem einhalten _muss_.
Natürlich, und das Name Mangling ist eine Eigenheit von C++, die dessen Module von anderen unterscheidet. Insofern ist es eine sprachabhängige Geschichte - aber eigentlich nur eine Ausnahme von der Regel.
Schönen Abend noch,
Martin