<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Compact Framework [Italiano]</title>
        <link>http://blogs.ugidotnet.org/raffaele/category/690.aspx</link>
        <description>Programmazione e altre informazioni tecniche sul mondo dei Mobile Device (lingua Italiana)</description>
        <language>it-IT</language>
        <copyright>Raffaele Rialdi</copyright>
        <managingEditor>malta@vevy.com</managingEditor>
        <generator>Subtext Version 1.9.5.176</generator>
        <item>
            <title>Compact Framework, PowerToys e gli emulatori</title>
            <link>http://blogs.ugidotnet.org/raffaele/archive/2008/03/02/91463.aspx</link>
            <description>&lt;p&gt;Voglio ringraziare &lt;a href="http://blog.opennetcf.org/afeinman"&gt;Alex Feinman&lt;/a&gt; per l'&lt;a href="http://blog.opennetcf.org/afeinman/PermaLink,guid,5291cae4-c5d8-4333-a5d7-d4a57646e7e5.aspx"&gt;illuminante spiegazione&lt;/a&gt; su come avviare RTF Host sugli emulatori di Windows Mobile.&lt;/p&gt;  &lt;p&gt;Seguendo infatti passo-passo la procedura indicata nei power toys, non si riesce ad aggiungere un "TCP Device" ottenendo invece l'errore seguente.&lt;/p&gt;  &lt;p&gt;&lt;img height="239" src="http://blog.opennetcf.org/afeinman/content/binary/RTFError.png" width="240" /&gt;&lt;/p&gt;  &lt;p&gt;Riporto perciò la traduzione della procedura che Alex Feinman ha pubblicato sul proprio blog:&lt;/p&gt;  &lt;p&gt;L'errore deriva dal fatto che gli emulatori di default usano il trasporto DMA (DeviceDMA.dll), perciò RTF non seleziona il trasporto corretto. Per poter eseguire la procedura "Add TCP Device" la procedura è la seguente:&lt;/p&gt;  &lt;p&gt;1. Avviare l'emulatore usando il Device Emulator Manager   &lt;br /&gt;2. Configurare una connessione di rete e il folder condiviso mappato sulla storage card.    &lt;br /&gt;3. Copiare il seguente file nella storage card:    &lt;br /&gt;C:\Program Files\Common Files\microsoft shared\CoreCon\1.0\Target\wce400\armv4i\TCPConnectionA.dll"    &lt;br /&gt;4. Usando il file explorer dell'emulatore, aprire la cartella \Windows\Corecon1.1    &lt;br /&gt;Se la cartella non fosse presente, collegarsi con l'emulatore da Visual Studio almeno una volta.    &lt;br /&gt;5. Lanciare ClientShutdown (a seguito del quale verrà creata una nuova cartella che ha per nome un guid)    &lt;br /&gt;6. Copiare \Storage\Card\TcpConnectionA.dll in \Windows    &lt;br /&gt;7. Aprire la cartella \Windows e cancellare DeviceDMA.dll    &lt;br /&gt;Il file risulta occupato solo se non si è lanciato ClientShutdown precedentemente    &lt;br /&gt;8. Aprire la cartella \Windows\Corecon1.1 e lanciare ConmanClient.exe    &lt;br /&gt;9. Lanciare RTF Host&lt;/p&gt;  &lt;p&gt;La procedura non è affatto ovvia e purtroppo non è documentata in MSDN. Ad ogni modo avviare RTF Host su un emulatore è utile sostanzialmente per eseguire delle demo e difficilmente potrà risultare utile durante il normale sviluppo su device reali dove questo problema non si verifica.&lt;/p&gt;  &lt;p&gt;Thanks Alex!&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/raffaele/aggbug/91463.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Raffaele Rialdi</dc:creator>
            <guid>http://blogs.ugidotnet.org/raffaele/archive/2008/03/02/91463.aspx</guid>
            <pubDate>Sun, 02 Mar 2008 12:59:17 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/raffaele/comments/91463.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/raffaele/archive/2008/03/02/91463.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/raffaele/comments/commentRss/91463.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Power off sul pocket e .... la seriale non ti risponde più</title>
            <link>http://blogs.ugidotnet.org/raffaele/archive/2004/11/27/6243.aspx</link>
            <description>&lt;P&gt;Credo che chiunque stia sviluppando sul compact framework conosca &lt;A href="http://www.opennetcf.org"&gt;www.opennetcf.org&lt;/A&gt;, una pregevole iniziativa di alcuni programmatori, molti dei quali &lt;A href="http://mvp.support.microsoft.com/"&gt;MVP&lt;/A&gt;, per estendere le funzionalit&amp;#224; del &lt;A href="http://msdn.microsoft.com/smartclient/understanding/netcf/"&gt;Compact Framework&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Una delle librerie pi&amp;#249; apprezzate &amp;#232; quella per la &lt;A href="http://www.opennetcf.org/library/OpenNETCF.IO.Serial.html"&gt;comunicazione via seriale&lt;/A&gt;, anche perch&amp;#232; i device bluetooth (gps, lettori di codice a barre, etc.) sono mappati sui pocket pc su una seriale virtuale cos&amp;#236; come se fossero collegati ad un cavo (ma ovviamente non lo sono).&lt;/P&gt;
&lt;P&gt;Il problema banale che ho riscontrato &amp;#232; che la libreria seriale interrompe la comunicazine qualora il pocket venga spento (o si spenga da solo per risparmiare le batterie). Nel momento in cui il pocket viene riacceso l'handle della seriale non sembra essere pi&amp;#249; valido, la comunicazione sullo stack bluetooth non &amp;#232; pi&amp;#249; valido, tipicamente il device bluetooth si scollega, e qualsiasi tentativo di spedire/ricevere dei byte fallisce.&lt;/P&gt;
&lt;P&gt;Visto che il progetto &amp;#232; open source ho quindi ricompilato la libreria attivando una sorta di log su file per vedere cosa accade alla WaitCommEvent alla riaccensione del pocket. La WaitCommEvent &amp;#232; una API Win32 che mima la WaitForSingleObject sospendendo il thread in attesa di un evento dalla porta seriale. Bene, alla riaccensione la WaitCommEvent si risveglia lanciando un 'urlo' e recuperando l'ultimo errore Win32 si scopre che si &amp;#232; verificato un ERROR_GEN_FAILURE (vedi winerror.h delle librerie del C++).&lt;/P&gt;
&lt;P&gt;Visto che il problema deriva dal fatto che ormai quell'handle della porta seriale non &amp;#232; pi&amp;#249; valido, la soluzione &amp;#232; semplice: riaprire la comunicazione seriale dopo un adeguato tempo di Sleep che permetta al Pocket di riprendersi per bene dopo la dormitina ;-).&lt;/P&gt;
&lt;P&gt;La patch &amp;#232; quindi molto semplice e subito dopo la WaitCommEvent, avendo recuperato l'errore tramite Marshal.GetLastWin32Error, ho aggiunto:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(e == 31)&amp;nbsp;// ERROR_GEN_FAILURE&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Threading.Thread.Sleep(3500);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hPort = m_CommAPI.CreateFile(portName);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(hPort == (IntPtr)CommAPI.INVALID_HANDLE_VALUE)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int MyErr = Marshal.GetLastWin32Error();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(MyErr == (int)APIErrors.ERROR_ACCESS_DENIED)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string error = String.Format("CreateFile Failed: {0}", e);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw new CommPortException(error);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Il risultato &amp;#232; che dopo la riaccensione, il pocket pc mostra nuovamente la scelta del device bluetooth a cui collegarsi. Questa &amp;#232; la classica schermata che appare sempre dopo l'apertura della seriale virtuale dello stack bluetooth ed &amp;#232; indispensabile perch&amp;#232; dopo un paio di minuti che non vengono usati, i device bluetooth entrano in una modalit&amp;#224; di sleep per risparmiare le batterie.&lt;/P&gt;
&lt;P&gt;Attualmente non ho ancora sottoposto la patch perch&amp;#232; sto valutando il tempo di sleep pi&amp;#249; adeguato a seconda dei pocket. Non escludo di dover alzare ancora un po' il valore di tre secondi e mezzo.&lt;/P&gt;&lt;img src="http://blogs.ugidotnet.org/raffaele/aggbug/6243.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Raffaele Rialdi</dc:creator>
            <guid>http://blogs.ugidotnet.org/raffaele/archive/2004/11/27/6243.aspx</guid>
            <pubDate>Sat, 27 Nov 2004 13:13:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/raffaele/comments/6243.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/raffaele/archive/2004/11/27/6243.aspx#feedback</comments>
            <slash:comments>8</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/raffaele/comments/commentRss/6243.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Wifi e autenticazione radius</title>
            <link>http://blogs.ugidotnet.org/raffaele/archive/2004/11/17/5648.aspx</link>
            <description>&lt;P&gt;Un'altro incubo a base di Pocket PC, questa volta con la Second Edition.&lt;/P&gt;
&lt;P&gt;Il problema era un classico: usare il WiFi con Wep + autenticazione su un server Radius (Windows Server).&lt;/P&gt;
&lt;P&gt;Mentre su un PC &amp;#232; possibile usare la pagina web per effettuare la richiesta (&lt;A href="http://myserver/certsrv"&gt;http://myserver/certsrv&lt;/A&gt;) perch&amp;#232; si possono usare gli Activex, questi non sono usabili da PocketPC. La soluzione viene dal PocketPC sdk dove &amp;#232; presente una utility chiamata Enroll.exe che i manufacturer di device forniscono insieme al sistema operativo con nomi pi&amp;#249; o meno diversi.&lt;/P&gt;
&lt;P&gt;Poi al momento in cui si lancia questa bella utility si riceve un brutto errore (&amp;#8220;Your certificate request was denied&amp;#8220;) e sul server compare questo log nell'event viewer:&lt;BR&gt;Event ID: 53, &amp;#8220;Certificate Services denied request 71 because The requested certificate template is not supported by this CA.&amp;nbsp; 0x80094800 (-2146875392).&amp;nbsp; The request was for CN=SubjectName-Should Be OverWritten by CA.&amp;nbsp; Additional information: Denied by Policy Module&amp;nbsp; The request was for certificate template (ClientAuth) that is not supported by the Certificate Services policy.&amp;#8220; &lt;/P&gt;
&lt;P&gt;Dopo inutili ricerche su google e quant'altro, scopro che &amp;#232; necessario fare una modifica su certificate server seguendo passo passo &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceosdev5/html/wce50tskconfiguringcertificateservertemplates.asp"&gt;questa procedura&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Ma dico io, i manufacturer di questi giocattoli (e mi astengo dai nomi), non potrebbero specificarlo a chiare lettere che &amp;#232; necessario fare questa cosa?&lt;/P&gt;&lt;img src="http://blogs.ugidotnet.org/raffaele/aggbug/5648.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Raffaele Rialdi</dc:creator>
            <guid>http://blogs.ugidotnet.org/raffaele/archive/2004/11/17/5648.aspx</guid>
            <pubDate>Wed, 17 Nov 2004 13:32:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/raffaele/comments/5648.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/raffaele/archive/2004/11/17/5648.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/raffaele/comments/commentRss/5648.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Problemi di stile nella DataGrid?</title>
            <link>http://blogs.ugidotnet.org/raffaele/archive/2004/11/17/5646.aspx</link>
            <description>&lt;P&gt;Nel Compact Framework ho sbattuto un po' la testa contro un problema di DataGridTableStyle.&lt;/P&gt;
&lt;P&gt;Nonostante l'aggiunta di tutte le DataGridTextBoxColumn nel modo corretto, non c'era modo di vedere le colonne come avrei voluto.&lt;/P&gt;
&lt;P&gt;La soluzione? Occhio alla DataGridTextBoxColumn.MappingName perch&amp;#232; &amp;#232; &lt;STRONG&gt;case sensitive&lt;/STRONG&gt;!&lt;/P&gt;&lt;img src="http://blogs.ugidotnet.org/raffaele/aggbug/5646.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Raffaele Rialdi</dc:creator>
            <guid>http://blogs.ugidotnet.org/raffaele/archive/2004/11/17/5646.aspx</guid>
            <pubDate>Wed, 17 Nov 2004 13:18:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/raffaele/comments/5646.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/raffaele/archive/2004/11/17/5646.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/raffaele/comments/commentRss/5646.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Un po' di stamina per lo sviluppatore di Compact Framework.</title>
            <link>http://blogs.ugidotnet.org/raffaele/archive/2004/11/17/5642.aspx</link>
            <description>&lt;P&gt;Certo che passare da un progetto&amp;nbsp;full-framework ad un altro con il compact-framework &amp;#232; un gran bel salto nel vuoto.&lt;/P&gt;
&lt;P&gt;Per chi non lo sapesse ancora, ci sono alcuni preziosi strumenti che sono un add-on indispensabile oltre a VS.NET 2003:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Pocket PC 2003 SDK&lt;/LI&gt;
&lt;LI&gt;Emulatore Pocket PC 2003&lt;/LI&gt;
&lt;LI&gt;Emulatore Pocket PC 2003 Second Edition&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Questi si possono scaricare dal sito &lt;A href="http://msdn.microsoft.com/mobility/downloads/sdks/default.aspx"&gt;download&lt;/A&gt; di Microsoft.&lt;/P&gt;
&lt;P&gt;In aggiunta a questi torna molto utile il piccolo (non poi cos&amp;#236; piccolo) &lt;A href="http://www.opennetcf.org"&gt;Smart Device Framework&lt;/A&gt;&amp;nbsp;sviluppato da alcuni &lt;A href="http://mvp.support.microsoft.com"&gt;MVP&lt;/A&gt;, che consente di muoversi con migliore agilit&amp;#224; nelle mancanze del compact framework. Il consiglio &amp;#232; di scaricarlo e usarlo perch&amp;#232; &amp;#232; veramente prezioso.&lt;/P&gt;
&lt;P&gt;Non ultima c'&amp;#232; ancora una &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetcomp/html/PInvokeLib.asp"&gt;libreria&lt;/A&gt; che ha belle e pronte delle definizioni PInvoke per chiamare le API native. Ovviamente visto che queste chiamate sono molto simili a quelle del full-framework non &amp;#232; un'idea malsana scopiazzarle per un progetto del fratellone maggiore.&lt;/P&gt;&lt;img src="http://blogs.ugidotnet.org/raffaele/aggbug/5642.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Raffaele Rialdi</dc:creator>
            <guid>http://blogs.ugidotnet.org/raffaele/archive/2004/11/17/5642.aspx</guid>
            <pubDate>Wed, 17 Nov 2004 13:13:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/raffaele/comments/5642.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/raffaele/archive/2004/11/17/5642.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/raffaele/comments/commentRss/5642.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>