Lazarus és a Windows CE

A feladat a következő. Kell készíteni egy alkalmazást Windows CE 6.1 (valami olyasmi) alá, ami távoli szerverről lekér és küld adatokat. Lehessen keresni az adatok között, az eredményeket töltse be egy táblázatba, ott ha kiválasztanak egyet, arról bővebb adatot kérjen le és majd hozzá lehessen adni új adatokat. Kezeljük a kamerát is és a készített képeket töltsük is fel.
Az első körben ez nem az én feladatom volt, no meg mit értek én a Windows CE rendszerhez? Semmit, de mivel van a hátam mögött egy Delphiben összeeszkábált DMcsvEditor és pár más hulladék, jött a kérdés, abban megoldható e. Nem, de mivel a DMcsv Lazarusban készült, ami nem más mint a DMcsvEditor Linuxos portja, bizony abban a fejlesztői környezetben lehet Win CE alá fejleszteni. A probléma még mindig a tudással van, mert DMcsv ide vagy oda, ez a feladat azért klasszisokkal nagyobb tudás igényű, legalábbis ezt hittem. Nézzük részletesebben mire van szükség.

1. Az alkalmazásból küldeni kell GET vagy POST utasítást a távoli PHP fájlnak amely majd vissza köpi ami kell. Szóval kellene egy HTTP Send cucc, DMcsv-ben volt ilyen a frissítés lekérdezéséhez. Az alábbiakkal malmoztam sikertelenül, kezdve a Synapse-vel, mivel Linux alatt ezt használtam.

- Synapse
- HTPPGet (UtilMind komponense DMcsvEditorban ez ketyegett)
- INET
- Indy

Mikor rendesen kimalmoztam magam, találtam egy 2006-os unitot, amit valami CCRDude írt. A ceWinINet végre azt csinálta és úgy, ahogy azt kell. Egy probléma kipipálva.



2. Itt úgy éreztem elvérzek, de sokszor hittem már ezt, most mégis ott tornyosult előttem, hogy nem értek a bináris dolgokhoz, akkor hogy jövök én ahhoz, hogy hardvert programozzak még ha az internet nyitott könyv is. Mind a fórum, mind más helyek nagyon kevés támaszt nyújtottak a feladat megoldásához, de akadt egy funkció, aminek internetes elérését azóta se lelem, olyan sikeresen elmentettem, de csak a helyet, a funkció megvan és működik. Betölti szépen a kamera kezelését és adott helyre elmenti a képet. Újabb probléma pipa, legalábbis azt hittem.

3. Megvan ugye a kép, ezt már csak fel kellene tölteni, de mint kiderült a csWinINet unit erre nem alkalmas, mert valójában ez csak fájl letöltésre lett megírva. Na most két lehetőség volt, megtanulom a Win API-t kezelni Pascalban és tovább fejlesztem a unitot vagy újra ott vagyok ahol az elején és keresek egy olyat ami ide-oda működik vagy legalább oda működjön és használom vegyítve. Ekkor megláttam a fától az erdőt és a Lazarus beépített unitját a fphttpclient-et. Ezzel már felrepülnek a képek és nem mellesleg POST és GET utasítást is tud, O_o. Az adatküldés fel és le irányba véglegesen kipipálva.

4. Ez egy olyan probléma volt, amire nem volt válasz, már azon gondolkodtam, hogy kénytelen leszek fórumba írni, pedig nagyon nem szokásom. A kamera kezelésénél véletlenszerűen kilépett a program, néha már az első kép készítésénél, néha a 2. - 3.-nál. Se hiba üzenet, se semmi, pedig már végig try except-eltem minden lehetséges helyet, bár már az első ilyen kilépkedéseknél volt egy sejtésem, ami a sok eredménytelen keresgélés és hiba keresés után beigazolódott, elfogy a memória és nem a kódom eszi meg. Ez akkor lett 100%-os, amikor emulátorban egyszer se lépett ki a program. Ahhoz képest, hogy a generált 10+ megabájtos exe fájlok az új verziójú Lazarusban egy kijelöléssel 2-3 megabyte-osra cserélhetőek és nem kell a wiki által bűvészkedni a beállításokban, az eszközbe pakolt memória kevésnek bizonyul, mikor a program beül a memóriába és onnan még a kamera funkciót is indítja. UPX ott ücsörgött, de úgy voltam vele, majd ha kész a cucc, akkor kell majd csak, de tévedtem. Általa az exe 700 kilóbájt-ra csökkent és már az eszközön sem lépked ki,legalábbis 10+ kép készítése után sem dobott hátast a program.

Összefoglalva, érdekes kaland ez az egész. Úgy programozni valamiben, valamihez, hogy egyikkel sincs kellő tapasztalat és tudás, de az is lehet csak én vagyok megint kishitű.
Ami a programot illeti, kukáztam belőle csWinINet-et, most már minden fel és letöltést a beépített fphttpclient kezel, nem is értem miért nem ezzel kezdtem...

Megjegyzések