Bob Swart (aka Dr.Bob)
Borland C++Builder

Delphi voor C++ Programmeurs

borland c++builder splash screen

Toen begin 1995 Delphi voor het eerst op de markt kwam was dat een enorme inhaalslag voor Pascal programmeurs die tot dan toe met Borland Pascal zowel tegen Visual Basic als C++ vaak het onderspit moesten Delven. Visual Basic zou sneller ontwikkelen (RAD) en C++ had meer Power, dus waar had je Pascal nog voor nodig? Delphi liet zien dat je RAD, compilatie snelheid en database connectivity in één tool kan verenigen, en inmiddels zijn ruim 600,000 exemplaren van Delphi wereldwijd over de toonbank gegaan.
C++ gebruikers zagen dit alles met lede ogen aan. De taal C++ was en is krachtiger dan ObjectPascal, bevat meer mogelijkheden om problemen op te lossen (operator overloading, function overloading, multiple inheritance, templates, om er maar een paar te noemen) maar hierdoor gaat het ontwikkelen van een C++ toepassing vaak minder RAD dan gewenst. C++ is nu eenmaal geen RAD tool, en ook al noemt Microsoft zijn C++ omgeving Visual C++, het heeft niet het visuele van Visual Basic of Delphi.
Eén van de meest gestelde vragen aan Borland, na het uitkomen van Delphi, was dan ook: "Komt er ook een Delphi voor C++?". Lang werd deze vraag ontkennend beantwoord (de taal C++ zou te complex zijn om een snelle two-way ontwikkelomgeving á la Delphi mogelijk te maken). Inmiddels kwamen er C++ omgevingen uit die wat meer RAD elementen in zich hadden, zoals Optima++. Nog lang geen Delphi, maar al meer RAD dan Borland C++ of Visual C++ bijvoorbeeld.
Toen, rond COMDEX eind vorig jaar, was daar plotseling het gerucht: Borland had in het diepste geheim gewerkt aan een tool met de codenamen Pronto en Ebony. Later werd de officiële naam C++Builder bekend en bleek dat het hier om een heuze versie van Delphi voor ANSI C++ ging.

Delphi 2.01++
Als uitgangspunt had Borland Delphi 2.01 genomen. Dit betekent dus ook dat Borland C++Builder alleen maar geschikt is om 32-bits executables te genereren voor Windows 95 en NT (dit in tegenstelling tot Borland C++ 5.0 die ook 16-bits toepassingen en zelfs nog DOS targets kan genereren). Het was al langer bekend dat Delphi 2.01 gebruik maakte van dezelfde 32-bits back-end compiler als Borland C++ (hierdoor kunnen Delphi gebruikers bijvoorbeeld .OBJ files genereren). Borland C++Builder maakt nu echter ook gebruik van het visuele Delphi two-way front-end, en zelfs van de Delphi VCL Visual Component Library met ruim 100 componenten. Daarnaast heeft C++Builder dezelfde koppeling met de BDE voor benadering van Paradox en dBASE tabellen, of Access en FoxPro via ODBC. Ook de Delphi 2 features zoals Form Inheritance en Data Modules voor Business Rules zijn terug te vinden, net als ondersteuning voor de Win32 API, ODBC, OLE, OLE Automation, COM, DCOM, MAPI, UniCode, WinSock, OCX, ActiveX, CGI, ISAPI en NSAPI. Kortom: de volledige 32-bits Delphi 2.01 maar dan voor C++.
Het is zelfs zo erg dat bij het opstarten van Borland C++Builder je haast het idee krijgt dat je per ongeluk Delphi hebt opgestart.

borland c++builder á la delphi

Zoals in de screenshot duidelijk te zien is lijkt C++Builder inderdaad als twee druppels water op Delphi: we hebben een Component Palette (rechtboven) met dezelfde componenten als Delphi 2.01 - dus inclusief de Win95 en de NetManage internet ActiveX controls, een Object Inspector (links), de two-way Form Designer en Code Editor (rechts) en zaken als de Project Manager etc. Het enige verschil dat direkt opvalt is het feit dat in de Code Editor nu gebruik gemaakt wordt van de C++ syntax in plaats van ObjectPascal! Verder maakt C++Builder gebruik van het bekende property-method-event model binnen de componenten. Deze VCL componenten zijn afkomstig van Delphi 2.01. Letterlijk zelfs, aangezien ze niet naar C++ omgeschreven zijn doch slechts voorzien zijn van een C++ header file. De source code van de componenten zelf is nog steeds in ObjectPascal. Dit klink vreemd, maar Borland C++Builder is in staat om niet alleen C++ maar ook ObjectPascal files te compileren. En niet alleen voor de VCL componenten van Delphi 2.01 die gebruikt worden, maar ook om bijvoorbeeld complete Forms uit Delphi projecten te hergebruiken en te migreren naar C++ en C++Builder zonder ze compleet te hoeven herschrijven in C++. Het is dus bijvoorbeeld mogelijk om de Forms uit een Delphi project te gebruiken in een C++Builder project. We kunnen zelfs Form Inheritance toepassen op deze Delphi Forms, en dan krijgen we het leuke effect dat het oorspronkelijke Delphi Form vanuit C++Builder aan te passen is door ObjectPascal code te schrijven, terwijl het nieuwe Form (afgeleid van het eerste Form) volledig in C++ code is geschreven. Hierdoor kunnen we dus projecten krijgen die zowel in ObjectPascal als in C++ zijn geschreven. De enige beperking is dat Borland C++Builder wel bestaande Delphi (ObjectPascal) Forms kan wijzigen en daarin ObjectPascal code kan laten schrijven, maar nieuwe Forms zijn altijd in C++. Borland C++Builder kan dus wel gebruikt worden om Delphi projecten naar C++ te migreren, maar niet andersom. Maar het is nu dus wel mogelijk dat een deel van een project in Delphi 2 gebeurt, terwijl een ander deel in C++Builder wordt uitgevoerd, waarna het geheel wordt samengevoegd in de C++Builder IDE die in staat is om beide te compileren en te combineren tot een applicatie. Hierdoor kan binnen één projectteam toch ieder werken met zijn/haar favoriete tool (wat voor de een Delphi is terwijl de ander liever C++(Builder) prefereert).
Let op: Borland C++Builder bevat geen OWL of MFC, doch alleen de VCL componenten.

Als we nog eens naar de screenshot kijken valt de Delphi gebruikers onder ons wellicht iets nieuws op: de properties ImeMode en ImeName. Deze properties zijn van toepassing voor de internationalisering van applicaties die met C++Builder gemaakt worden. Dat kennen we (nog) niet in Delphi. Dat klopt, want deze zaken zijn ná Delphi 2.01 pas toegevoegd aan de VCL componenten. Hierdoor is C++Builder dus eigenlijk niet op Delphi 2.01 gebasseerd, maar op Delphi 2.01++. Om voor de aardigheid de exacte versie van de ingebouwde Delphi ObjectPascal compiler te bepalen kunnen we het programma van de listing gebruiken. Het blijkt dat VER93 gedefinieerd is, wat betekent dat het hier gaat om een ObjectPascal compiler die bij een "Delphi versie 2.3" zouden kunnen horen.

  program version;
  uses
    Dialogs;
  begin
  {$IFDEF VER93}
    ShowMessage('ObjectPascal Compiler VER93');
  {$ELSE}
    ShowMessage('Andere versie ObjectPascal Compiler');
  {$ENDIF}
  end.
objectpascal compiler

Het programma is te compileren met de C++Builder DCC32 command-line compiler. Overigens geeft de toetscombinatie ALT+VERSION in de About Box van C++Builder Client/Server Suite 1.0 de waarde 0.0.4.253. Dit interne versienummer is met name nuttig om te weten als er ooit een inline release uitkomt waar dit versienummer hoger is.

borland c++builder about box

Compileren
C++Builder lijkt dus in vele opzichten op Delphi. Maar hoe zit het met de compilatiesnelheid; het grote probleem waardoor Borland kennelijk niet eerder in staat was om een Delphi voor C++ uit te brengen? Wel, het compileren van een C++Builder project kost nog steeds veel meer tijd vergeleken met het compileren van een Delphi project. Maar C++Builder heeft een slimme incrementele linker, waardoor het compileren voor de tweede keer in een fractie van de tijd gebeurt die de eerste keer nodig heeft. Er kunnen drie soorten C++ wijzigingen gedaan worden binnen een C++Builder project: in het .DFM Form bestand (wijzigen van de waarde van een property), in het .CPP Code bestand (wijzigen van de code van een event bijvoorbeeld) en in het .H of .HPP Header bestand (het toevoegen van een event definitie). Deze drie soorten code wijzigingen zullen een opvolgend zwaar gevolg hebben op de snelheid van het compileren. Als alleen het .DFM bestand gewijzigd is hoeft alleen opnieuw gelinkt te worden. Bij alleen een wijziging in het .CPP bestand hoeft alleen dit bestand opnieuw gecompileerd te worden, gevolgd door opnieuw linken. Het wijzigen van een header bestand, tot slot, heeft het meeste hercompileer werk tot gevolg. Toch blijft alles door de incrementele linker binnen de grenzen van het acceptabele, zodat we inderdaad kunnen spreken van een C++ Rapid Application Development tool
Bij het opstarten van C++Builder voor de eerste keer krijg je de keuze om C++Builder een default verzameling linker state files te laten genereren die het compileren/link proces nog eens aanzienlijk versnellen. Dit kan bij het opstarten meteen gekozen worden, of naderhand met de opdracht "bcb -deflink".

BDE
Borland C++Builder bevat ook de nieuwe versie van de Borland Database Engine, wat betekent dat we native gebruik kunnen maken van tabellen in (Visual) dBASE en Paradox formaat, of via ODBC van onder andere Access en FoxPro tabellen. De Data Access en Data Controls tab van het Component Palette bieden een reeks aan componenten om het schrijven van database toepassingen tot een fluitje van een cent te maken. Voeg daarbij de kracht van Data Modules en de Business Rules, en het zal duidelijk zijn dat Borland C++Builder behalve op RAD gebied ook op het gebied van database conenctivity hoog scoort.

Wizards
Er zijn nog een paar verschillen tussen Delphi 2.01 en C++Builder die opvallen. Allereerst heten Experts vanaf nu Wizards (dus we hebben nu een Database Form Wizard, Dialog Wizard Application Wizard en Component Wizard). De reden van het wijzigen van de term "Expert" in "Wizard" is vermoedelijk omdat iedereen wel wist wat een Wizard was, maar niet wat een Expert is ("hetzelfde als een Wizard"). Microsoft zet nu eenmaal de standard, ook wat naamgeving betreft kennelijk (denk maar aan OCX en ActiveX).
Daarnaast valt het me op dat C++Builder niet de try-finally exception handling variant kent die we in Delphi kunnen gebruiken om het opruimen van geheugen en resources te kunnen waarborgen. Eén van de redenen zou kunnen zijn dat in C++ statische instaties van objecten altijd al automatisch worden opgeriumd (van de stack). Het is echter wel opvallend. Gelukkig werkt het nog wel in de ObjectPascal compiler die bij C++Builder zit, dus we komen niet in de problemen als we Delphi Forms die gebruik maken van try-finally willen gebruiken in C++Builder.

DEMOS
Behalve een grote verzameling componenten op het Component Palette, bevat C++Builder ook een uitgebreide verzameling voorbeeld toepassingen waarin het gebruik van deze componenten duidelijk wordt en ze tot hun recht komen (zoals het voorbeeld dat laat zien hoe de FTP-ActiveX control van NetManage samen met een ListView en TreeView gebruikt kan worden om een mooi internet FTP-Client programma te schrijven).
Deze voorbeelden hebben in mijn ogen grote waarde, zeker voor C++ ontwikkelaars die voor het eerst in aanraking komen met de VCL visual component library. De handleidingen en on-line help geven namelijk wel uitleg over alle componenten en hun properties, methods en events, maar vaak maar beperkte voorbeelden.

borland c++builder ide

Versies
Er zijn drie versies van C++Builder. Allereerst hebben we de instapversie C++Builder Standard. Deze zie ik meer als hobby versie voor wie op RAD wijze eenvoudige C++ toepassingen wil maken. Een soort van Turbo C++, maar dan op de Delphi manier. Een uitgebreidere versie is de C++Builder Professional, waar alles in zit wat een ervaren C++ programmeur wil hebben. En wellicht meer. Sterk te vergelijken met Delphi Professional. Dus inclusief BDE met ODBC, VCL source code (in ObjectPascal), QuickReports, InstallShield Express, WinSight32, de NetManage Internet Solutions Pack, Open Tools API, Team Development Support (heb je PVCS voor nodig), een verzameling OCX controls en een stapel handleidingen. Voor Client/Server C++ ontwikkelaars is er de Borland C++Builder Client/Server Suite, net als Delphi Client/Server een mega pakket waar ook de SQL Links voor Oracle, Sybase, Informix, DB2, MS SQL Server en InterBase bij zit, net als de SQL Database Explorer, SQL Monitor (voor performance tests), Visual SQL Query Builder en een NT-versie van InterBase met 2-user licentie.

borland c++builder

Conclusie
Borland C++Builder is een waardige C++ versie van Delphi. Wie ervaring heeft met Delphi maar liever met C++ werkt zou ik willen adviseren vandaag nog een examplaar van C++Builder aan te schaffen. Wie denkt dat C++ een veiliger investering is dan ObjectPascal moet wel bedenken dat de taal krachtiger, doch ook complexer is. Minder ervaren gebruikers kunnen wellicht beter eerst met Delphi 2 beginnen, waarna later alsnog naar C++Builder kan worden overgestapt (voordeel is dat de dan ontwikkelde Delphi programmatuur eenvoudig naar C++Builder kan worden gemigreerd). Wie de kracht en uitdrukkingsmogelijkheden van C++ niet wou missen en om die reden (nog) niet eerder aan Delphi wou of kon denken, kan nu met C++Builder zijn hart ophalen. In mijn ogen is het een zegen voor C++ Bouwers die nu eindelijk ook écht RAD kunnen ontwikkelen.
Mocht iemand nog vragen, opmerkingen of suggesties hebben, dan hoor ik die het liefst via .


This webpage © 1999-2006 by webmaster drs. Robert E. Swart (aka - www.drbob42.com). All Rights Reserved.