Pascal nach C++ konvertieren

  • zu konvertierender Pascal Quellcode (Testunit.pas):
unit TestUnit;
interface

type

    MyEnum = (meOne, meTwo, meThree);
    function DoSomething(Value : MyEnum) : string;
    var

        I : Integer;
        Buffer : array [0..255] of Char;

    implementation

        function DoSomething(Value : MyEnum) : string;
        begin

            case Value of

                meOne : Result := 'One';
                meTwo : Result := 'Two';
                meThree : Result := 'Three';

            end;

        end;

end.
  • der passende Header (*.hpp) kann wie oben beschrieben, oder auch auf der Kommandozeile per Hand generiert werden: dcc32 -jphn TestUnit.pas
  • DCC32.EXE ist der Pascal compiler, der Schalter “-jphn” teilt dem Pascalcompiler mit, eine *.hpp und eine *.obj für den BC++Builder zu generieren
  • die fertig generierte Testunit.hpp:
#ifndef TestUnitHPP
#define TestUnitHPP

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

namespace Testunit
{
    #pragma option push -b-
    enum MyEnum { meOne, meTwo, meThree };
    #pragma option pop

    extern PACKAGE int I;
    extern PACKAGE char Buffer[256];
    extern PACKAGE AnsiString __fastcall DoSomething(MyEnum Value);
} /* namespace Testunit */

#if !defined(NO_IMPLICIT_NAMESPACE_USE)
using namespace Testunit;
#endif
#pragma option pop // -w-
#pragma option pop // -Vx

#pragma delphiheader end.

#endif // TestUnit
  • befreit vom Ballast sieht die Testunit.hpp nun so aus:
enum MyEnum { meOne, meTwo, meThree };
int I;
char Buffer[256];
AnsiString __fastcall DoSomething(MyEnum Value);
  • die Deklarationen wurden jetzt generiert, der Delphi-Code in der *.pas muss jetzt noch “per Hand” selber umgesetzt werden 🙂