{"id":228,"date":"2007-04-18T09:20:18","date_gmt":"2007-04-18T08:20:18","guid":{"rendered":"http:\/\/soci.hu\/blog\/index.php\/2007\/04\/18\/apro-korultekintes-a-vista-forraskodban\/"},"modified":"2007-04-18T09:20:18","modified_gmt":"2007-04-18T08:20:18","slug":"apro-korultekintes-a-vista-forraskodban","status":"publish","type":"post","link":"https:\/\/soci.hu\/blog\/index.php\/2007\/04\/18\/apro-korultekintes-a-vista-forraskodban\/","title":{"rendered":"Apr\u00f3 k\u00f6r\u00fcltekint\u00e9s a Vista forr\u00e1sk\u00f3dban"},"content":{"rendered":"<p>Kb. k\u00e9t hete felrakt\u00e1k a forr\u00e1sk\u00f3dokat tartalmaz\u00f3 szerverre a Vista forr\u00e1sk\u00f3dj\u00e1t is (az MVP-s\u00e9ghez lehet k\u00e9rni a hozz\u00e1f\u00e9r\u00e9st, \u00e9n \u00e9ltem vele, haszn\u00e1lom is rendszeresen). Pont j\u00f3l j\u00f6tt, mert az ActiveX Installer Service nem hallgat r\u00e1m, pedig a munk\u00e1mhoz ezt be kell konfigur\u00e1lni majd az \u00fcgyfeleknek.<br \/>\nDebugolni lenne a legegyszer\u0171bb ilyenkor, de egyel\u0151re m\u00e9g nincs Vista kompatibilis k\u00e1rtyaolvas\u00f3 driver, \u00edgy marad az XP al\u00f3li k\u00f3db\u00f6ng\u00e9sz\u00e9s (nyilv\u00e1n marha nagy secu van, nem csak jelsz\u00f3 alap\u00fa a hozz\u00e1f\u00e9r\u00e9s).<br \/>\nTerm\u00e9szetesen a k\u00f3dokr\u00f3l nem besz\u00e9lhetek direktben, f\u0151leg nem paszt\u00e1zhatok be ide a blogba bel\u0151l\u00fck, de egy apr\u00f3s\u00e1got megosztok veletek, tetszett.<br \/>\nA Debugging Windows Applications k\u00f6nyv \u00f3ta nagy szerelmese vagyok az Asserteknek. Az az igazs\u00e1g, m\u00edg nem olvastam a k\u00f6nyvet nem \u00e9rtettem, mire is val\u00f3 az assert? Az\u00e9rt nem \u00e9rtettem, mert ha \u00fagyis van pl. egy f\u00fcggv\u00e9nyben param\u00e9ter ellen\u0151rz\u00e9s, ami exceptiont dob, vagy E_INVALIDARG-ot ad vissza, ha nem stimmel valami, akkor minek duplik\u00e1lni az ellen\u0151rz\u00e9st m\u00e9g ASSERT-ekkel is? Nos, az\u00e9rt, mert az assert kiv\u00e1lt\u00f3d\u00e1sa eset\u00e9n egy gombnyom\u00e1sra elindul a debugger, \u00e9s benn vagyok a hib\u00e1s r\u00e9szben, abban a k\u00f3dr\u00e9szletben, ahol nem teljes\u00fcl az \u00e1ltalam elv\u00e1rt felt\u00e9tel (invari\u00e1ns, a tudom\u00e1nyos neve? :). M\u00e9sk\u00e9nt lehet, hogy csak 5 szinttel feljebb der\u00fclne f\u00e9ny a hib\u00e1ra, amikor m\u00e1r nem ismertek a m\u00e9lyebben hib\u00e1z\u00f3 met\u00f3dus lok\u00e1lis v\u00e1ltoz\u00f3 \u00e9rt\u00e9kei, hisz a verem lebomlott. Tk\u00e9ppen az assertekkel a k\u00f6vetelm\u00e9nyek egy r\u00e9sz\u00e9t k\u00f3dolja az ember a k\u00f3dba, \u00e9s egy\u00fattal \u00f6nv\u00e9delmet \u00e9p\u00edt be a saj\u00e1t hib\u00e1i ellen.<\/p>\n<p>No, vissza a forr\u00e1sk\u00f3dhoz. Az ieinstal.exe forr\u00e1s\u00e1t n\u00e9zegetem, h\u00e1tha r\u00e1j\u00f6v\u00f6k, mi\u00e9rt nem \u00fagy m\u0171k\u00f6dik, ahogy szeretn\u00e9m. A forr\u00e1s C++-ban \u00edr\u00f3dott, nem C-ben. (Az oprendszer vegyesen asm, C \u00e9s C++ k\u00f3dokb\u00f3l \u00e9p\u00fcl fel.)<br \/>\nCOM alap\u00fa, ez\u00e9rt tele van HRESULT kezel\u00e9ssel. Ugye ez a hagyom\u00e1nyos, status k\u00f3d alap\u00fa hibakezel\u00e9s, ami, ha csak if-elseket haszn\u00e1lunk nagyon m\u00e9lyen betolt k\u00f3dblokkokkat eredm\u00e9nyezne. Ezt megel\u0151zend\u0151 vagy exceptionkezel\u00e9st haszn\u00e1lunk, vagy gotokat. Az els\u0151 megold\u00e1s C++-ban nem annyira elterjedt, ink\u00e1bb managed \u00e9s script k\u00f6rnyezetben haszn\u00e1lj\u00e1k elterjedtebben (de lehet, hogy csak nem \u00e9rtek hozz\u00e1). C++ k\u00f3dokban gyakoribb a goto haszn\u00e1lata. if (FAILED(hr)) goto ErrorExit. \u00cdgy s\u00edk lesz a k\u00f3d, nem agyonindent\u00e1lt.<br \/>\nAz t\u00e1rgyalt forr\u00e1sk\u00f3dban szinte minden met\u00f3dusban van k\u00e9t kij\u00e1rat, egy sikeres \u00e9s egy sikertelen, ahov\u00e1 gotoval ugrik be a szerz\u0151. \u00c9rdekes a k\u00f6vetkez\u0151. A sikeres kij\u00e1ratn\u00e1l vagy egy ilyen sor: ASSERT(SUCCEDED(hr)). A hib\u00e1s \u00e1gn\u00e1l: ASSERT(FAILED(hr)). Azaz a debug k\u00f3d ellen\u0151rzni, hogy ha egyszer a sikeres \u00e1gra engedt\u00fck a k\u00f3dot, akkor ne adjunk m\u00e1r vissza v\u00e9letlen\u00fcl hib\u00e1ra utal\u00f3 HRESULT-ot, \u00e9s ford\u00edtva.<br \/>\nApr\u00f3, de szellemes tr\u00fckk.<br \/>\nMellesleg \u00e9n sok\u00e1ig legacynek \u00e9reztem a statusk\u00f3d alap\u00fa hibakezel\u00e9st, ez volt a .NET-es tank\u00f6nyvekben is. Zoxigen annak idej\u00e9n adott egy linket, ahol <a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/\">Raymond<\/a> bar\u00e1tunk rendberakta a fejemben a <a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2004\/04\/22\/118161.aspx\">k\u00e9rd\u00e9st<\/a>. K\u00f6telez\u0151 olvasm\u00e1ny. Van <a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2005\/01\/14\/352949.aspx\">ut\u00f3j\u00e1t\u00e9k<\/a> is a t\u00e9m\u00e1hoz.<br \/>\nMi\u00f3ta ezt olvastam mindig \u00edrok az if-ek mell\u00e9 else-t m\u00e9g akkor is, ha abban nem csin\u00e1lok semmit. Ilyenkor egy commentben oda\u00edrom, hogy ebben az \u00e1gban nincs teend\u0151, de legal\u00e1bb l\u00e1tom, hogy nem feledkeztem meg r\u00f3la.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kb. k\u00e9t hete felrakt\u00e1k a forr\u00e1sk\u00f3dokat tartalmaz\u00f3 szerverre a Vista forr\u00e1sk\u00f3dj\u00e1t is (az MVP-s\u00e9ghez lehet k\u00e9rni a hozz\u00e1f\u00e9r\u00e9st, \u00e9n \u00e9ltem vele, haszn\u00e1lom&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,23],"tags":[],"class_list":["post-228","post","type-post","status-publish","format-standard","hentry","category-szakmai-elet","category-vista"],"_links":{"self":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=228"}],"version-history":[{"count":0,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/228\/revisions"}],"wp:attachment":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}