Bob Swart (aka Dr.Bob)
Delphi 6 Update 2 noodzakelijk kwaad?

De tweede update voor Delphi 6 is beschikbaar (en behalve een hoop verbeteringen is deze update ook noodzakelijk voor wie Delphi 6 naast C++Builder 6 op hetzelfde systeem wil hebben draaien). Bovendien worden er vele zaken verbeterd binnen WebSnap en BizSnap (je zou zelfs kunnen zeggen dat het SOAP deel voor het grootste deel herschreven is). Voor wie altijd het-nieuwste-van-het-nieuwste wil uitproberen is er dus weinig keuze: Delphi 6 Update 2 moet gewoon!
De update kan gedownload worden via de Delphi 6 Registered Users pagina. Vergeet echter niet om ook de helpfile updates op te halen, want die zaten er nog niet bij! En daarnaast zijn er nog enkele andere zaken die wat bijzondere aandacht vereisen...

Variants
Vlak na het uitkomen van de Update 2 konden we berichten lezen in de delphi.non-technical newsgroep betreffende een probleem met executables (gecompileerd met Delphi 6 Update 2) die niet langer werken onder Windows 95. Gelukkig heb ik thuis nog een Windows 95 machine (een spelletjescomputer voor de kinderen), dus kon ik dit makkelijk testen. Wie schetst mijn verbazing toen ik inderdaad de volgende foutmelding kreeg (gegenereerd door een executable die met Delphi 6.02 was gecompileerd):

Later bleek zelfs dat dit niet alleen fout gaat op Windows 95 machines, maar ook op de eerste releases van Windows 98 en zelfs Windows NT4 voor service pack 2.
Het probleem wordt veroorzaakt door het gebruik van een tweetal APIs uit de OleAut32.dll, namelijk VarNeg en VarNot. En laten er nou ruim 20 versies van deze DLL bestaan, die niet allemaal de VarNeg en VarNot bevatten (alhoewel de Microsoft documentatie daar wat vaag over doet). Deze twee functies worden geïmporteerd in de VarUtils.pas unit, vanaf regel 1019:
  function VarNeg; external oleaut name 'VarNeg';
  function VarNot; external oleaut name 'VarNot';
En ze worden gebruikt in de NegateViaOS en NotViaOS procedures in de Variants unit zelf. Om ervoor te zorgen dat de VarNeg en VarNot niet langer gebruikt worden (en door de linker dus niet geïmporteerd zullen worden), kunnen we de aanroepen naar VarNeg en VarNot in commentaar zetten. Ik heb er zelf nog een Assert aan toegevoegd, om te kijken of de NegateViaOS en NotViaOS überhaubt worden gebruikt:
  procedure NegateViaOS(var Dest: TVarData);
  begin
  //VarResultCheck(VarNeg(Dest, Dest));
    Assert(False, 'NegateViaOS');
  end;

  procedure NotViaOS(var Dest: TVarData);
  begin
  //VarResultCheck(VarNot(Dest, Dest));
    Assert(False, 'NotViaOS');
  end;
Het blijkt dat bovenstaande NegateViaOS en NotViaOS alleen maar worden aangeroepen in het geval van een Variant operatie op een niet direkt door Delphi ondersteund type (voor dit "onbekende" type is de oplossing om dan het OS te gebruiken voor de Negate en Not operaties). Dus het probleem lijkt mee te vallen (behoudens het feit dat de twee APIs niet aangetroffen worden op oudere Windows machines).
Om dit probleem "officieel" op te lossen, heeft Borland een nieuwe versie van de Variants, VarUtils en SysConst units uitgebracht, onder de noemer van een Public Beta. Na verloop van tijd zal deze "public beta" de status "officieel" krijgen, en dan kunnen we wellicht nog een grote Update 3 kunnen verwachten.

Public Betas
Als er geen Update 3 meer komt, dan moeten er naast de Variants bug, nog enkele andere zaken handmatig worden aangepast. Ik noemde eerder al de on-line help, maar er zijn na Update 2 nog enkele andere additionele zaken uitgebracht, zoals:

Tot slot is er nu ook een nieuwe Warning Expert beschikbaar (die het na Update 2 niet meer deed).

Delphi 6 laatste Variants Patch
De laatste Variants Patch heeft nu de status "officieel" gekregen van Borland (was eerst alleen maar "public beta"). Zie de Borland Developer Network website voor details.

Nawoord
Hoe om te gaan met de Public Betas? Het is leuk om front-runner te zijn, maar er moeten vaak ook toepassingen worden opgeleverd, en daarbij is het gebruik van een Public Beta weer niet aan te raden (weinig klanten stellen het op prijs om als beta tester op te treden - tenzij ze dat van te voren is gevraagd). Het is dus altijd weer een "strijd" tussen de nieuw(st)e technologie en "de orde van de dag", en ik ken meerdere ontwikkelaars die nog steeds Delphi 5 gebruiken voor lopende projecten (en met de nieuwste versie van Delphi aan het prototypen zijn voor de toekomst, maar nog niet veel meer).
Ik kan me als eenmanszaak (met als voornaamste doel het geven van trainingen en consultancy) gelukkig wél veroorloven om op het scherpst van de snede de nieuwe technieken uit te proberen, en daarbij een voortrekkersrol te nemen (om vervolgens mijn ervaringen weer hier op de website te rapporteren en in mijn trainingen en adviezen te verwerken). 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.