Radek Chalupa - vývoj software

Hlavní stránka

Články

Vývoj software

Školení a konzultace

Webdesign

Externí spolupráce

Software

Knihy

Kontakt


Visual Studio 2005 Beta 2 potřetí

2.6.2005

Dnes se znovu vrátím pár řádky k dojmům z betaverze Visual Studia 2005. Nejprve ta příjemná "překvapení":

Pokud mám ATL projekt obsahující ActiveX prvek, v současné verzi (2003 i těch předchozích) při vyvolání příkazu "build" nebo spuštění dubugování se vždy objevila hláška tvrdící že se některý soubor(-y) projektu změnil a je třeba provést rebuild celého projektu a to i v případě že jsem pro provedení rebuildu tuto akci zavolal znova aniž bych se mezitím dotkl klávesnice nebo myši. Toto se týká pouze (ATL) projektu pokud obsahuje ActiveX objekty. Pokud v něm mám pouze běžné COMy ("Simple COM object") je vše v pořádku. Dobrou zprávou je že ve VS 2005 už je to opravené i pro ActiveX.

Další odstraněný bug se také týká ATL projektu s COM/ActiveX objektem(-y). Pokud si necháte wizardem vygenerovat metodu typu událost (event) do které dáte jeden nebo více parametrů jako vstup i výstup ([in, out]) a použijete tedy typ parametru např. LONG* nebo BSTR* a posléze si necháte vygenerovat funkci na vyvolání této události (Fire_xxx) a tuto funkci v projektu někde zavoláte, zjistíte že "je to rozbitý". Wizard totiž špatně vygeneruje typy parametrů (nazvané avarParams), nepřidá tam hodnotu VT_BYREF. Musíte si to tedy opravit ručně (samozřejmě vědět jak). Konkrétně např. pro parametr LONG* tam má být:

avarParams[0].vt = VT_UI4 | VT_BYREF;

No a ve VS 2005 Beta už je to v pořádku a lze  předpokládat že to zůstane i ve finální verzi:-).

Méně příjemného překvapení jsem se dočkal ve WinForms aplikaci, když jsem vytvořil a spustil druhé vlákno. Na konci jeho prováděcí funkce jsem chtěl přistoupit k ovládacímu prvky na formuláři (například naplnit ListBox). Za běhu programu došlo k výjimce a v chybové hlášce stálo:

"Cross-thread operation not valid: Control 'listBox' accessed from a thread other than the thread it was created on."

Ve Visual Studiu 2003 tohle bylo bez problémů možné. Chápu sice že přistupovat z různých vláken ke stejnému oknu (nebo obecně nějakému objektu) může vést k průšvihům díky nezabezpečené synchronizaci vláken, ale pokud si to člověk správně ošetří nevidím důvod proč by to mělo být takhle z principu zakázané. Zkoušel jsem také pouhé poslání vlastní uživatelské zprávy (WM_APP+1) okno formuláře pomocí importované funkce PostMessage - výsledek byl stejný:-(.

Pokud někdo víte o tomto problému více, uvítám když mi napíšete nebo dáte vědět on-line.

Sdílet

  Copyright © 2010 Radek Chalupa || tel. 739 219 991Kontakt | Poslat e-mailÚvod