Dnes PDF komponenta, kousek kódu, trochu háčků, něco o flash a skoro žádný OT. A ani slovo o FreeAndNil.
PDF to Text
Analyzoval jsem, zda neexistuje rozumné řešení za rozumnou cenu jak z PDF dostat text v češtině. Nakonec jsem jednu knihovnu našel: PDFtext od pdf-analyzer.com nabízí DLL za US$ 57,00,které podle mne funguje a vrátí v UTF8 opravdu reálný a správný český text. Ke stažení demo.
TArray
TArray je deklarováno v system.pas jako
TArray<T> = array of T;
tj. jako generické pole typu T.
V System.Generics.Collections je pak deklarována třída, která umožňuje řazení, vyhledávání (i s případným vlastním porovnávačem) atd.
uses
System.SysUtils,
System.Generics.Collections;
var
ar: TArray<integer>;
i: Integer;
begin
SetLength(ar, 10);
for i := 0 to High(ar) do
ar[i] := random(100);
TArray.Sort<integer>(ar);
for i := 0 to High(ar) do
writeln(ar[i], ', ');
end.
Virtual method interception
Předminule jsem tu odkazoval DORM a TMS Aurelius. Barry Kelly popsal novinku v Delphi XE, kdy pomocí RTTI lze šachovat s virtuálními metodami - ideální pro remoting. Nepochybuji, že to uvedené knihovny používají. Mimochodem, kdysi dávno jsem tu v rámci série háčků (tj. nečestných a nesportovních zásahů do kódu) popsal nahrazení virtuální metody cizí třídy. Nyní uvedený kód je výrazně čistější.
Pozor na háčky
Mimochodem ty háčky jsou celkem prasárna. Pokud někomu dodáváte např. DCU a spoléháte se, že stačí zobrazit nějaký messagebox po startu a nejlépe na to máte nějakou globální proceduru typu ShowTrial, tak se nedivte až Vám to někdo za běhu hackne aby ušetřil. Stačí to krokovat, zjistit kde se to vypisuje a pak napsat něco jako
uses
vasunit;
var
p: pointer;
b: byte;
n: DWORD;
initialization
b := $C3; // RET
p := GetActualAddr(@vasunit.ShowTrial);
WriteProcessMemory(GetCurrentProcess, p, @b, 1, n);
finalization
end.
Kde GetActualAddr je funkce z těch háčků, vrací adresu funkce @vasunit.ShowTrial. No a pak jen stačí pomocí WriteProcessMemory napsat na její začátek RET. Přitom by stačilo tak málo, třeba pro začátek použít inline. To to řádově ztíží - zvláště pokud je to použité na více místech. Samozřejmě takto můžete za běhu patchnout cokoliv,
většinou se dá nějaký ten CALL za běhu najít nebo dopočítat. Takže pozor na to!
No, dekompilaci Delphi programů jsem se již věnoval, takže laskavý čtenář už určitě zná některé triky a čemu se vyhnout.
Adobe ukončilo vývoj flash pro mobily
Cha, tak to Adobe vzdal - ukončil vývoj nových verzí flash pluginu pro mobilní zařízení. Ve prospěch nativních aplikací s Adobe AIR. Takže Steve nakonec vyhrál když odmítal flash na iPhone.
No není to poprvé kdy v poslední době je nahrazován "managed" platforma za nativní.
P.S.: Dneska nebude žádná oftopinka, jelikož jediné co by stálo za řeč je odkaz od Andreano Lanusse shrnující jak Android, resp. google uhnul z původního dobrého konceptu od sloupkaře techcrunch.com, případně jak se aktuálně InstallAware rozkmotřilo s Embarcaderem, ale ani jedno za to nestojí (v prvním případě bych riskoval možnou inzultaci, v druhém případě si nejsem jist kam to povede - ale dle wiki slibovaný update 4 má být full install, tak to třeba souvisí).