<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CEBLOG@Addinte &#187; Visual Studio 2005</title>
	<atom:link href="http://addinte.com/ceblog/tag/visual-studio-2005/feed/" rel="self" type="application/rss+xml" />
	<link>http://addinte.com/ceblog</link>
	<description>Um blog sobre Windows CE em português</description>
	<lastBuildDate>Fri, 28 Aug 2009 21:39:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Sopa de Letrinhas</title>
		<link>http://addinte.com/ceblog/2009/08/28/sopa-de-letrinhas/</link>
		<comments>http://addinte.com/ceblog/2009/08/28/sopa-de-letrinhas/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 19:07:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Iniciante]]></category>
		<category><![CDATA[Platform Builder]]></category>
		<category><![CDATA[Visual Studio 2005]]></category>

		<guid isPermaLink="false">http://addinte.com/ceblog/?p=24</guid>
		<description><![CDATA[
Um dos maiores problemas enfrentados no desenvolvimento é de como usar a ajuda. Normalmente, existe um guia de referência de todas as funções, mas ele não é claro o suficiente pra quem chega “agora”.
Particularmente, eu recomendo ao pegar uma plataforma/linguagem nova traçar um objetivo simples (quando estava no colégio técnico, meu objetivo era sempre fazer [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://farm1.static.flickr.com/193/474912291_53893098d7.jpg" alt="" width="500" height="375" /></p>
<p>Um dos maiores problemas enfrentados no desenvolvimento é de como usar a ajuda. Normalmente, existe um guia de referência de todas as funções, mas ele não é claro o suficiente pra quem chega “agora”.</p>
<p>Particularmente, eu recomendo ao pegar uma plataforma/linguagem nova traçar um objetivo simples (quando estava no colégio técnico, meu objetivo era sempre fazer um programinha que calculava a fórmula de Baskara). Comece do começo, escreva um Hello World, se acostume com a ferramenta, coloque breakpoints. Tente antes de sair perguntando, para que quando você fizer a pergunta, ela já será não tão obvia e ao mesmo tempo você entenderá melhor a resposta pra ela. E leia pelo menos os tutoriais iniciais. Saiba do que a ajuda fala quando está lidando com termos que você nunca viu antes, <strong>principalmente acrônimos. E são deles que gostaria de falar aqui:</strong></p>
<ul>
<li><strong>SDK: Software Development Kit</strong>; O SDK contém as bibliotecas (*.h, *.lib) para o desenvolvimento específico para aquele hardware que você deseja trabalhar com. No caso do Visual Studio 2005, ele já vem com o SDK para o desenvolvimento em Pocket PC. O SDK <strong>pode ou não incluir um emulador</strong> (como é o caso do Pocket PC 2003, que vem com um emulador para vários tipos de tela e teclado diferente). Além disso, ao instalar um SDK e escolhe-lo ao iniciar um projeto<strong>, ele já acerta o caminho para as headers e libraries</strong>, além de várias outras configurações do compilador, tais como, por exemplo, a arquitetura alvo para qual se deseja desenvolver.</li>
</ul>
<p>Normalmente, é possível utilizar qualquer SDK que tenha a mesma arquitetura de processador para um hardware qualquer.  Por isso que em meu projeto TFTPCE do codeplex eu uso o Windows CE Standard SDK, que me dá a possibilidade de compilar pra qualquer arquitetura. (<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=fa1a3d66-3f61-4ddc-9510-ae450e2318c3">http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=fa1a3d66-3f61-4ddc-9510-ae450e2318c3</a>)</p>
<p>É vantagem usar um SDK específico quando o fabricante do hardware fornece um, pois além das APIs padrão da Microsoft ele pode colocar mais algumas referências a funções especiais do hardware dele. (Por exemplo, um hardware que tenha uma garra pode ter uma API que controla essa garra)</p>
<ul>
<li><strong>DTK: Developer Tool Kit</strong>: O DTK não é comumente usado, esse é o primeiro que eu vejo. Ele constitui de algumas ferramentas extras <strong>que dependem do SDK para funcionar.</strong> O Link pro DTK do Windows Móbile 6.5 é esse:</li>
</ul>
<p><a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=20686a1d-97a8-4f80-bc6a-ae010e085a6e">http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=20686a1d-97a8-4f80-bc6a-ae010e085a6e</a></p>
<p>Além desses dois acrônimos, há também os que são mais comuns de ser ouvido quando se trabalha um nível mais baixo, com o Platform Builder, isto é, adaptando o Sistema Operacional para um hardware específico.</p>
<ul>
<li><strong>BSP, OEM e OAL: </strong>O BSP vem de Board Support Packager constitue em um conjunto de drivers e configurações que o fabricante de hardware, <strong>o OEM (Original Equipment Manufacturer).</strong> Além dos drivers, o BSP deve ter uma camada que conecta o processador com o Kernel do CE (pré-compilado). Essa camada é a <strong>OAL (OEM Adaptation Layer)</strong></li>
</ul>
<p><em>*A imagem ilustrativa foi retirada do flicker de Lucia Freitas, e está sobre a creative commons : <a href="http://www.flickr.com/photos/lufreitas/474912291/" target="_blank">http://www.flickr.com/photos/lufreitas/474912291/</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://addinte.com/ceblog/2009/08/28/sopa-de-letrinhas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Olá Mundo</title>
		<link>http://addinte.com/ceblog/2009/08/16/ola-mundo/</link>
		<comments>http://addinte.com/ceblog/2009/08/16/ola-mundo/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 01:22:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Hello World]]></category>
		<category><![CDATA[Pocket PC 2003 Emulator]]></category>
		<category><![CDATA[Visual Studio 2005]]></category>
		<category><![CDATA[Windows Mobile]]></category>

		<guid isPermaLink="false">http://addinte.com/ceblog/?p=3</guid>
		<description><![CDATA[Olá Mundo. Um tema mais batido que esse para começar esse blog, impossível. Quando estamos de frente a uma nova e inexplorada tecnologia, a pergunta que nos vem a cabeça é: &#8220;Por onde eu começo?&#8221; Pois eu digo, do começo, dizendo um tímido olá para a nova tecnologia.
Com o Windows CE e o Windows Mobile, [...]]]></description>
			<content:encoded><![CDATA[<p>Olá Mundo. Um tema mais batido que esse para começar esse blog, impossível. Quando estamos de frente a uma nova e inexplorada tecnologia, a pergunta que nos vem a cabeça é: &#8220;Por onde eu começo?&#8221; Pois eu digo, do começo, dizendo um tímido olá para a nova tecnologia.</p>
<p>Com o Windows CE e o Windows Mobile, não podia ser diferente. Criando e compilando um HelloWorld, já é possível avançar, e mais do que isso, fazer as perguntas corretas para as pessoas que podem te ajudar.</p>
<p>Passo a passo, vamos criar um simples (simples mesmo) Olá Mundo não gerenciado para Pocket PC, que é o antigo nome do Windows Mobile, que é baseado em Windows CE 4.2</p>
<p>Não se preocupem com as palavras grafadas em negrito, no próximo post irei explicar cada uma delas melhor.</p>
<p>Assumindo que o Visual Studio 2005 está instalado corretamente, vamos lá: Comece clicando em File-&gt;New Project</p>
<p><img class="aligncenter size-full wp-image-4" title="NewProject" src="http://addinte.com/ceblog/wp-content/uploads/2009/08/NewProject.jpg" alt="NewProject" width="544" height="374" /></p>
<p>Agora, Selectione Visual C++ /Smart Device, e finalmente Win32 Smart Device application. Coloque um nome e um caminho para o projeto, e clique em OK.</p>
<p>Na proxima tela, você tem uma descrição basica do que você selecionou. Clique em Platforms.</p>
<p><img class="aligncenter size-full wp-image-5" title="SelectSDK" src="http://addinte.com/ceblog/wp-content/uploads/2009/08/SelectSDK.jpg" alt="SelectSDK" width="615" height="437" /></p>
<p>Aqui você irá escolher para qual dispositivo(s) seu programa irá rodar. Para fins de demonstração, selecione o Pocket PC 2003</p>
<p>&#8211;O quê? Como assim, mas eu quero que rode no Windows Mobile/CE/Genérico X! Por quê devo escolher isso?</p>
<p>Como o Windows CE é um sistema operacional portável, que roda em vários tipos de coisas diferentes, aqui você aqui está escolhendo</p>
<p>1-) A arquitetura do processador (MIPS/ARM/SH/X86) . Por exemplo, na maioria dos celulares e pocket pcs de hoje em dia temos a arquitetura ARM.</p>
<p>2-) As bibliotecas adicionais que você terá acesso. Como o sistema é modular, o seu dispositivo pode ter só algumas partes. (Posso fazer uma torradeira rodar Windows CE,  logo, provavelmente ela não terá tela; será um dispositivo &#8220;headless&#8221;, então as bibliotecas (APIs) de desenho na tela não estão disponíveis)</p>
<p>Todo esse conjunto de configurações chama-se <strong>SDK</strong>, ou software development kit. Ele é sempre fornecido pelo fabricante do produto. Junto com ele pode vir, além das APIS, um emulador também, como é o caso do Pocket PC 2003.</p>
<p>Tendo isso claro em mente, vamos prosseguir pro próximo passo. Clique em Application Settings.</p>
<p><img class="aligncenter size-full wp-image-6" title="Application Settings" src="http://addinte.com/ceblog/wp-content/uploads/2009/08/Application-Settings.jpg" alt="Application Settings" width="615" height="437" /></p>
<p>Selecione Console Application aqui, e clique em Finish. Nosso Wizard deverá gerar o seguinte código, que é quase igual ao de qualquer hello world em c:</p>
<p><em>#include &#8220;stdafx.h&#8221;<br />
#include &lt;windows.h&gt;<br />
#include &lt;commctrl.h&gt;</em></p>
<p><em>int _tmain(int argc, _TCHAR* argv[])<br />
{<br />
return 0;<br />
}</em><br />
&#8211; Mas o quê?? Como assim, STDAFX.H??</p>
<p>Não se preocupe com ela agora. Só irei dizer por enquanto que ela é apenas um método para compilação de código pertencente as headers basicas mais rápidamente. Precisaria de um post inteiro para explicar melhor.</p>
<p>&#8211;Tá, mas e a &lt;CommCrtl.h&gt;</p>
<p>Ela é referente ao conjunto de controles comuns (para interface). Não imagino por quê a Microsoft colocou ela no wizard para gerar uma aplicação de linha de comando. Você pode retirá-la tranquilamente.</p>
<p>&#8211;Humm e o &lt;Windows.h&gt;</p>
<p>Essa é importante, contem todas as definições que o windows usa. E mais, dentro dela ela ainda inclue vários e vários arquivos.</p>
<p>Agora, vamos preencher o nosso Hello World!!</p>
<p><em>#include &#8220;stdafx.h&#8221;<br />
#include &lt;windows.h&gt;<br />
//#include &lt;commctrl.h&gt;</em></p>
<p><em>int _tmain(int argc, _TCHAR* argv[])<br />
{</em></p>
<p><em> _tprintf(_T(&#8221;Olá Mundo!\n&#8221;));<br />
return 0;<br />
}</em></p>
<p>-O QUÊ ?? <strong>_t</strong>printf, <strong>_T</strong> e <strong>TCHAR*</strong> argv[] ? Isso não parece nada com o C que eu aprendi na escola/faculdade! Blasfêmia!</p>
<p>Calma, ainda é cedo pra entrar em pânico, isso piora mais tarde <img src='http://addinte.com/ceblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Como o Windows CE é <strong>UNICODE</strong>, todas as strings são baseadas em caracteres de <strong>DOIS BYTES</strong> de tamanho. o _tprintf é na verdade um define que verifica se o UNICODE foi definido pelo preprocessador e então escolhe entre wprintf ou printf normal. Isso deixa o código portável entre as várias versões diferentes do Windows. Até o Windows ME, apenas o sistema <strong>ANSI</strong> era suportado. (Caracteres que ocupam apenas <strong>UM BYTE</strong>). Isso pode parecer estranho para nós do mundo Ocidental, mas imagine um país que não usa os caracteres de A a Z para representar as palavras (Dica: Japão): A quantidade de letras deles é muito maior do que a capacidade de um byte (2^8 = 256 diferentes caracteres).</p>
<p>Da mesma forma, o _T explica que a string (&#8221;<em>&#8220;Olá Mundo!\n&#8221;</em>) irá ocupar 2 bytes na memória, e não um só.</p>
<p>&#8211;Ah, entendi! Então o TCHAR* argv[] é um ponteiro para Strings baseadas em Dois bytes por caracter!</p>
<p>Exato. Vamos ver como isso é na prática. Coloque um breakpoint no código, bem na linha do olá mundo:</p>
<p><img class="aligncenter size-full wp-image-7" title="breakpoint" src="http://addinte.com/ceblog/wp-content/uploads/2009/08/breakpoint.jpg" alt="breakpoint" width="419" height="144" /></p>
<p>E vamos apertar F5 para ver o que acontece.</p>
<p>&#8211;Você me enganou! Ele abre o Emulador do Pocket PC 2003, para no breakpoint mas não aparece nada!</p>
<p>É. Pois é. O Emulador do Pocket PC, e do Smartphone não contém um <strong>console</strong>. Isso não significa que ele não exista, significa apenas que quem criou <strong>os SDKs não quis incluir um console.</strong></p>
<p>Vamos modificar o código pra ficar um pouco melhor.</p>
<p><img class="aligncenter size-full wp-image-8" title="betterCode" src="http://addinte.com/ceblog/wp-content/uploads/2009/08/betterCode.jpg" alt="betterCode" width="730" height="218" />Agora sim, vamos apertar F5 e ver o que acontece!</p>
<p><img class="aligncenter size-full wp-image-9" title="MessageBox" src="http://addinte.com/ceblog/wp-content/uploads/2009/08/MessageBox.jpg" alt="MessageBox" width="346" height="586" /></p>
<p>Bem melhor né.</p>
<p>Faltando apenas um detalhe para terminar o post, vamos abrir a Janela Memory, da aba<strong> Debug-&gt;Windows-&gt;Memory-&gt;Memory 1, </strong>ou apertando <strong>ALT+6<br />
</strong></p>
<p>No endereço, vamos escrever msg (é, queremos analisar o conteúdo da variável msg)</p>
<p><img class="aligncenter size-full wp-image-10" title="Memory 1" src="http://addinte.com/ceblog/wp-content/uploads/2009/08/Memory-1.jpg" alt="Memory 1" width="605" height="152" /></p>
<p>Interessante né? Aqui podemos ver como que um char unicode é guardado. Olá mundo fica da seguinte forma:</p>
<p><img class="aligncenter size-full wp-image-11" title="HelloWorld" src="http://addinte.com/ceblog/wp-content/uploads/2009/08/HelloWorld.png" alt="HelloWorld" width="588" height="40" /></p>
<p>Viram só. Ocupando Dois BYTES cada char. Coloquem isso na cabeça, pra evitar várias dores na mesma ao desenvolver. Quase todas as funções nativas do CE aceitam APENAS o tipo TCHAR, que é definido como wchar, que é o wide char, de dois bytes. Todas as funçoes com manipulação de strings DEVEM usar a sua respectiva função, que sempre começa com _t (_tprintf, _tsprintf, _tcslen, _tcscmp &#8230;)</p>
<p>Ufa. Até que é simples não?</p>
<p>-Não.</p>
<p>Tá, eu sei. Mas você se acostuma, e é muito bacana ver um aplicativo nosso funcionando em algo que você pode levar pra qualquer lugar. Tenho certeza que se você mostrar pra sua mãe ela ficará orgulhosa. A minha ficou. Eu acho.</p>
<p><img src="file:///C:/DOCUME%7E1/Marcelo/LOCALS%7E1/Temp/moz-screenshot.png" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://addinte.com/ceblog/2009/08/16/ola-mundo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
