Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: C++ Code in Delphi

  Alt 12. Feb 2008, 18:57
Hi,
Du musst etwas aufpassen, sobald Du C++ Code hast, der wirklich Klassen verlangt hast Du mit Delphi ein Problem. Selbst wenn Delphi Dir eine Klasse zur Verfügung stellt, die die gleichen Felder und Methoden bereitstellt, so kannst Du die keineswegs einfach an ein C++-Programm übergeben. Das klappt (afaik) nicht mal ohne Probleme, wenn Du unterschiedliche C++-Compiler verwendet hast.

Beim Kontextmenü des Explorers wird deshalb (wie so ziemlich überall bei den Windows-Schnittstellen) sicherlich nicht C++ sondern C verwendet. Natürlich kannst Du unter C++ sehr leicht verbergen, welche Stellen jetzt reines C und der API geschuldet sind, denn auch das ist gültiger C++ Code, aber die Jungs von MS haben natürlich schon ganz gut mitgedacht! Anders als C++ ist bei C alles sehr einfach (darin liegen sowohl die Stärken, als auch die Schwächen der Sprache). C kennt eben keine Indirektion, verwendet einfache Strukturen und auch Felder sind nur ein großer Speicherblock in dem alle Daten am Stück hintereinander liegen. Das ist nicht kompliziert, also kann auch fast jede Sprache auf diese Art und Weise Daten erzeugen bzw. auf diese zugreifen. Einige Sprachen tun das in Form einer speziellen Schnittstelle (z.B. Haskell mit dem FFI, Java über JNI), andere untersützen das sehr viel direkter (C++).
In Delphi gibt es eigentlich zwei Möglichkeiten:
a) Es gibt schon eine VCL - Kapselung, brauche ich denke ich nicht näher erläutern
b) Man greift auf eine DLL zu. DLLs liegen in einem bekannten Format vor, dass unabhängig von der Programmiersprache ist (und eben auch aus allen genutzt werden kann). In Delphi gibt es dazu dann halt die external Direktive.

Ja, lange Rede, kurzer Sinn. Willst Du ein Windows Mittel nutzen, ist es eigentlich immer C. C kennt keine Klassen, nur Strukturen (und die können leicht in ein Record überführt werden). Die Windowsfunktionen sind zudem häufig schon gekapselt (also die Signatur gibt es schon und Du musst nur die richtige Unit einbinden, die wiederum fast immer wie die Header Datei heißt).

Gruß Der Unwissende
  Mit Zitat antworten Zitat