Jako obvykle pár připomínek z toho co mne zaujalo (THandle, Outlook, Fossil …) plus zamyšlení a info nakonec.
Problém INVALID_HANDLE_VALUE
Nejdříve upozornění na možnou chybu ve vašem programu: V Delphi XE2 vzhledem ke kompatibilitě pro 64bit aplikace se změnila deklarace návratová hodnoty FileCreate na
(korektní) THandle z předchozího Integer. Co to znamená?
Delphi 2007:
function FileCreate(const FileName: string): Integer;
{$IFDEF MSWINDOWS}
begin
Result := Integer(CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE,
0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0));
end;
{$ENDIF}
{$IFDEF LINUX}
begin
Result := FileCreate(FileName, FileAccessRights);
end;
{$ENDIF}
Delphi XE2:
function FileCreate(const FileName: string): THandle;
{$IFDEF MSWINDOWS}
begin
Result := FileCreate(FileName, fmShareExclusive, 0);
end;
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
begin
Result := FileCreate(FileName, FileAccessRights);
end;
{$ENDIF POSIX}
Mimochodem
Delphi XE2:
{$IF Defined(POSIX)}
THandle = Cardinal;
{$IFEND}
{$IF Defined(MSWINDOWS)}
THandle = NativeUInt;
{$IFEND}
Delphi 2007:
THandle = LongWord;
Pokud se nepodaří vytvořit soubor (nebo tak něco) měla by funkce (a všechny podobné) vrátit hodnotu INVALID_HANDLE_VALUE, která má ve Win32 hodnotu -1. Bohužel sem tam se objeví někdo, kdo nepoužije uvedenou konstantu a vrazí tam přímo hodnotu -1. Problémem je, že ve Win64 není výsledek integer (tedy hodnota se znamenénkem), ale THandle = NativeUInt (tj. 64bit neznaménková hodnota) a tak nedostanete požadovanou -1 ale hodnotu INVALID_HANDLE_VALUE ano.
// spatne napsane
if FileCreate('c:\temp') = -1 then
writeln('problem');
// dobre napsane
if FileCreate('c:\temp') = INVALID_HANDLE_VALUE then
writeln('problem');
ale pozor: kompilátor v tom špatném případě vygeneruje warning - což by Vás mělo trknout:
[DCC Warning] Soutez.dpr(54): W1021 Comparison always evaluates to False
[DCC Warning] Soutez.dpr(54): W1023 Comparing signed and unsigned types - widened both operands
Fossil
Fossil je Wiki, bug tracking, source control a blog v jedné patřičné binárce o velikosti cca 0.5M pro Linux, Windows nebo MAC. Vypadá to moc zajímavě. Zatím jsem to nezkoušel, ale podle ohlasů to není vůbec špatné. Navíc chiselapp.com nabízí free hosting pro fossil.
OT: Přesně takové aplikace mám rád - malé, rychlé a vůbec. Žádný framework, žádné PHP instalace, jen binárka (i jako CGI). I z toho hlediska, že taková aplikace je prakticky resistentní proti změnám okolí a může fungovat bez úprav x let.
Poslední dobou totiž přemýšlím, jaká je životnost aplikací a docházím k tomu, že taková normální Delphi aplikace má minimální závislosti a je tedy prakticky inertní proti změnám prostředí. Navíc, jak mi nedávno s (jeho) překvapením potvrdil jeden systémák co ji testoval bez problémů (kompilátor bylo Delphi XE) pod Wine, je velmi dobře podporována od Wine přes Windows 2000 až do Windows 8.
Outlook a Delphi
Nejlepší knihovna pro spolupráci čehokoliv (včetně .NETu) s Outlookem je Outlook Redemption. Autorem je Dmitry Streblechenko (MVP) a je psána v Delphi a podporována jak 32bit, tak 64bit verze Outlooku. Zároveň doporučuji Outlook Spy stejného autora. No a konečně Extended MAPI headers pro Delphi aktualizované a rozšířené i pro 64bit Delphi (tj. XE2) - původní verze byla pro Delphi 7 a napsal je Alexander Staubo.
And Now for Something Completely Different
P.S.: Embarcadero dočasně zase povolilo upgrade ze starších verzí na XE2 (a to i z před D2007) - navíc možnost upgrade z D2007 letos končí (což bylo pro mne překvapení). Takže nyní budou už jen unicode verze.
Prosím berte tuto informaci jen jako informaci, která by se někomu mohla hodit - nechci aby mi zase někdo vpálil, že jsem interesován na prodeji. Opakuji: opravdu nemám žádnou provizi z prodaných licencí, nejsem technická podpora (veškeré technické dotazy odpovídám zadarmo, popř. složitější problémy lze možno zaplatit), nejsem zaměstnancem EMBT ani Borlandu a mám naprostou svobodu v tom co píši a kromě sprosťáren a spamů nejsou komentáře cenzurovány. Ale na druhou stranu mi naše zastoupení (resp. p. Kubát) vychází vstříc (licence Delphi, komunikace, ceny do soutěží atd.). Prostě podobně u jako jiných odborných serverů.
P.P.S.: Tak nějak začínám třetí rok Delphi.cz - 314 příspěvků (+ pár velkých vpravo), 806 komentářů, 925 hodnotitelů. Díky moc autorům článků, komentářů (kolikrát velice zajímavých) a hodnotitelům (je to pro mne velmi důležitá informace).