Speicherlayout COM Objekte
-
Hallo zusammen,
mich interessiert, wieso etwas funktioniert was meiner Meinung nach gar nicht funktionieren zwangsläufig müsste:
Ich habe gesehen, dass das Interface eines COM-Objects in C++ üblicherweise durch eine Klasse mit pure virtual functions implementiert wird.
Nun ist aber die Implementierung von C++ Klassen mit virtuellen Funktionen meines Wissens nach nicht standardisiert. Wieso kann ich dann trotzdem vom Builder aus z.B. DirectX Header und DLLs benutzen, ohne das alles in die Hose geht? Die DLLs wird Microsoft ja vermutlich mit Visual Studio kompiliert haben. Wieso passt der vom Builder erzeugte Code für die Header dann trotzdem zum Code in den DLLs?
Vielen Dank!
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
MrCOM schrieb:
Ich habe gesehen, dass das Interface eines COM-Objects in C++ üblicherweise durch eine Klasse mit pure virtual functions implementiert wird.
Nun ist aber die Implementierung von C++ Klassen mit virtuellen Funktionen meines Wissens nach nicht standardisiert.
Der C++ Standard schreibt das nicht vor, nein, aber der COM Standard.
Und wenn ein Compiler-Hersteller will dass man mit seinem Compiler schön in C++ COM programmieren kann, dann muss er sich daran halten.
Ist auch nicht schlimm, geht nur um die Position des VTable-Pointers und die Position/Reihenfolge der Funktionszeiger im VTable.
Und das auch nur für Klassen mit ausschliesslich public virtual pure functions, keinerlei Daten, etc.Da es also keine schlimme Einschränkung ist, werden es wohl die meisten Compiler für Windows so machen dass es geht.