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));
}
//----------------------------------------------------------------