Delphi Units in C++Builder nutzen

C++Bilder und Delphi haben etwas gemeinsam: Sie lassen es zu, dass der C++- bzw. Delphi-Code in den beiden Programmierumgebungen verwendet wird. Was aber interessiert, ist, wie man Delphi Units in C++Builder nutzen kann.

C++Builder interessiert es nicht, dass sich in einem Builder-Projekt neben C++Builder-Units auch Delphi-Units befinden. Er behandelt sie so, als wären sie C++Builder-Units. Insofern ist es manchmal sehr nützlich, Delphi-Units in einem C++Builder-Projekt einzubinden zu können. Das folgende Beispiel soll diesen Vorgang erläutern.

Die Beispiel-Delphi-Unit sieht folgendermassen aus:

{Beispiel Unit: CalcUnit.pas}

unit CalcUnit;
interface

type

OperationEnum = (plus, minus);

function Calc(i : Integer; j : Integer;operation : OperationEnum) :
Integer;

implementation

function Calc(i : Integer; j : Integer; operation : OperationEnum) :
Integer;
begin
 
case operation of

plus  : Result := i+j;
minus : Result := i-j;

end;

end;

end.

Diese Unit, unter CalcUnit.pas gespeichert, zum C++Builder-Projekt hinzufügen:

Die Delphi-Unit ist jetzt im Projekt eingebunden. Wenn das Projekt jetzt compliert wird, dann wird eine *.hpp-Datei für diese *.pas-Datei automatisch generiert. In diesem Beispiel sieht "CalcUnit.hpp" folgednermassen aus:

// Borland C++ Builder
// Copyright (c) 1995, 2002 by Borland Software Corporation
// All rights reserved

// (DO NOT EDIT: machine generated header) 'CalcUnit.pas' rev:6.00

#ifndef CalcUnitHPP
#define CalcUnitHPP

#pragma delphiheader begin
#pragma option push -w-
#pragma option push -Vx
#include <SysInit.hpp>	// Pascal unit
#include <System.hpp>	// Pascal unit

//-- user supplied -----------------------------------------------

namespace Calcunit
{
//-- type declarations -------------------------------------------
#pragma option push -b-
enum OperationEnum { plus, minus };
#pragma option pop

//-- var, const, procedure ---------------------------------------
extern PACKAGE int __fastcall Calc(int i, int j, OperationEnum
operation);

}	/* namespace Calcunit */
using namespace Calcunit;
#pragma option pop	// -w-
#pragma option pop	// -Vx

#pragma delphiheader end.
//-- end unit ----------------------------------------------------
#endif	// CalcUnit

Man könnte jetzt diese .hpp-Datei vom unnötigen Code befreien, ist allerdings nicht notwendig. Um nun die in der .pas-Datei definierten und implementierten Funktionen etc. nutzen zu können, muss diese .hpp-Datei im Projekt includiert werden:

#include "CalcUnit.hpp"

Und jetzt kann von der .cpp-Datei aus auf die Funktionen etc. der .pas-Datei zugegriffen werden:

//----------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  ShowMessage(Calc(2,1,plus));
}
//----------------------------------------------------------------

Zur Übersicht