<?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; Hello World</title>
	<atom:link href="http://addinte.com/ceblog/tag/hello-world/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>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>

