Náhodné výkřiky 17

vložil Radek Červinka 23. listopadu 2011 21:15

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).

Tagy: , , , ,

Praxe

Komentáře

24.11.2011 9:41:00 #

JaroB

Je bezva, když aplikace žije téměř bez úprav celá léta. Dodnes spravuji aplikaci, kterou jsem v roce 1995 založil v Delphi1 a která žije dodnes (s mezizastávkami v Delphi 3, pak 5 a nakonec 2005; letos jsem ji překompiloval v Delphi 2007 a předpokládám, že v této podobě dožije; ale jsem bez iluzí, její věk je na ní už znát).
Poněkud jiná situace je u otevřených kódů nebo sad komponent, většinou je kód založen v určité verzi Delphi a downgrade není možný (jednoduchý příklad množin v Delphi 2010, kód už pak není možné bez úprav překompilovat v Delphi 2009 a nižších). V poštovní schránce mi končí mnoho dotazů od uživatelů mých kódů např. na DelphiX, proč už konečně nepoužiju alespoň rozšířené záznamy. Potíž je v tom, že většina uživatelů stále používá nižší verze Delphi, obvykle 7, 2005 nebo dokonce i 5. Kdybych použil novikdy z posledních Delphi, tak se jim zavře cesta k frameworku jako takovému, a uživatelé budou, logicky, hledat náhradu, což zase na druhou stranu způsobí, že už se k mému kódu nikdy nevrátí. A to dokonce i když si pořídí nejnovější  Delphi...to mám ověřeno.

JaroB

24.11.2011 10:17:36 #

Radekc

Jaro: já nevím, kompatibilita je hezká věc, ale do určité fáze. Osobně beru většinou jako minimum D2007 (ale nikdy ne 5 - tím jsem se zbavil různých nekompatibilit jako Variants) a raději bych chtěl unicode verze. Jinak totiž sebou pořád budeme táhnout balvan a ten balvan nejvíce pocítí ti kdo používají novější verze - protože je to omezuje (a tebe zdržuje), a díky tomu možné problémy s unicode, 64bit atd, nevyužití inline atd, atd.

Věřím, že kdo to s Delphi myslí trochu vážně tak dávno upgradoval nejméně na 2010 nebo má aspoň starter edici nebo aspoň kradenou verzi :-). Schválně si zkus anketu, já ji mám v plánu.

Radekc

24.11.2011 10:26:59 #

JaroB

Posuzuji to podle uživatelů ze zemí jako je Japonsko, Čína, Brazílie a tak (tam je téměř rovnoměrné použití "různých" verzí Delphi, nepočítám-li Lazarus a Kylix), a to jsem počítal jenom uživatele, kteří se mi ozvali. Uživatelé z Česka jsou pak v naprosté menšině.
Ano, beru, aplikace pokud možno v poslední verzi Delphi, ale u knihoven to zas taková samozřejmost není (nebo prostě dochází k zakonzervování k nějaké verzi, teď třeba typicky neunicode (vývoj se ukončí), unicode (tady se ale jedná o nejen jinou verzi ale mnohdy i nekompatibilní)).
Nelze to asi jednoduše hodnotit podle jednoho, dvou hledisek.

JaroB

24.11.2011 12:34:10 #

<z>

D5 je extrem, ale D7 se podle me statecne drzi a ja v tom hojne delam - proste to byla nejzdarilejsi verze a prozatim stale dobre pouzitelna ... i kdyz nove veci uz jen s unicode

<z>

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců