<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="gl">
	<id>http://web.iesrodeira.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Programaci%C3%B3n_Multiplataforma_con_Glade</id>
	<title>Programación Multiplataforma con Glade - Historial de revisións</title>
	<link rel="self" type="application/atom+xml" href="http://web.iesrodeira.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Programaci%C3%B3n_Multiplataforma_con_Glade"/>
	<link rel="alternate" type="text/html" href="http://web.iesrodeira.com/mediawiki/index.php?title=Programaci%C3%B3n_Multiplataforma_con_Glade&amp;action=history"/>
	<updated>2026-09-13T13:35:03Z</updated>
	<subtitle>Historial de revisións desta páxina no wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>http://web.iesrodeira.com/mediawiki/index.php?title=Programaci%C3%B3n_Multiplataforma_con_Glade&amp;diff=1827&amp;oldid=prev</id>
		<title>Xavi: Nova páxina: &quot;O entorno natural das aplicacións con GTK+ son o entorno Gnome, e polo tanto Linux, pero xa hai tempo que se atopan dispoñibles para Windows tanto GTK+ como Glade....&quot;</title>
		<link rel="alternate" type="text/html" href="http://web.iesrodeira.com/mediawiki/index.php?title=Programaci%C3%B3n_Multiplataforma_con_Glade&amp;diff=1827&amp;oldid=prev"/>
		<updated>2014-06-26T09:21:51Z</updated>

		<summary type="html">&lt;p&gt;Nova páxina: &amp;quot;O entorno natural das aplicacións con GTK+ son o entorno &lt;a href=&quot;/mediawiki/index.php?title=Gal:Gnome&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Gal:Gnome (a páxina aínda non existe)&quot;&gt;Gnome&lt;/a&gt;, e polo tanto Linux, pero xa hai tempo que se atopan dispoñibles para Windows tanto GTK+ como Glade....&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Páxina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;O entorno natural das aplicacións con GTK+ son o entorno [[gal:Gnome|Gnome]], e polo tanto Linux, pero xa hai tempo que se atopan dispoñibles para Windows tanto GTK+ como Glade.&lt;br /&gt;
&lt;br /&gt;
Para programar con GTK+ (e Glade) no entorno Windows na linguaxe C, recomendo o uso do IDE [http://www.bloodshed.net/dev/devcpp.html Devcpp] que ten incluído o compilador [http://www.mingw.org/ MinGw] que é unha versión do &amp;#039;&amp;#039;gcc&amp;#039;&amp;#039; para Windows que che permitirá facer programas tanto de consola como de modo gráfico, xa sexa mediante liberías especiais (como GTK+) ou utilizando directamente o [[gal:API|API]] de Windows.&lt;br /&gt;
&lt;br /&gt;
[[Image:CompilerOptions.JPG|left|thumb|DevCpp: Opcións de Compilación]]&lt;br /&gt;
&lt;br /&gt;
Unha vez instalado o Devcpp deberás instalar a [http://gladewin32.sourceforge.net/ libraría GTK+ con Glade]. Logo poderás traballar utilizando o IDE ou ben cun editor de texto e compilando na liña de comandos.&lt;br /&gt;
&lt;br /&gt;
A principal (e case que única) diferencia coa programación en Linux atópase no xeito que ten Windows de manexar as librerías de enlace dinámico (DLLs). As funcións de tratamento de eventos necesitan enlazarse en tempo de execución (dinámicamente) e iso no entorno Windows é necesario indicalo explícitamente co seguinte prefixo na declaración da función:&lt;br /&gt;
&lt;br /&gt;
  __declspec (dllexport)&lt;br /&gt;
&lt;br /&gt;
O xeito de facelo para non ter que alterar o programa si compila para Windows ou para Linux pode ser o seguinte:&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
#ifdef __WINDOWS__&lt;br /&gt;
   #define EXPORT __declspec (dllexport)&lt;br /&gt;
#else&lt;br /&gt;
   #define EXPORT&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:includes.jpg|right|thumb|DevCpp: Includes]]&lt;br /&gt;
&lt;br /&gt;
Deste xeito, bastaría con poñer EXPORT antes da declaración das funcións de manexo de eventos (tanto no prototipo como na implementación da función), e cando se compile para Windows pasarlle ó &amp;#039;&amp;#039;gcc&amp;#039;&amp;#039; o indicador &amp;#039;&amp;#039;&amp;#039;-D__WINDOWS__&amp;#039;&amp;#039;&amp;#039; de xeito que marque as funcións como a exportar.&lt;br /&gt;
&lt;br /&gt;
En algunhas distribucións de Linux pode ser necesario engadir o flag de compilación &amp;#039;&amp;#039;&amp;#039;-export-dynamic&amp;#039;&amp;#039;&amp;#039; para facer o mesmo efecto.&lt;br /&gt;
&lt;br /&gt;
Outra pequena diferencia está en que é necesario indicarlle ó compilador donde estan as cabeceiras e as librarías. Esto en Linux facíase así:&lt;br /&gt;
&lt;br /&gt;
  gcc programa.c -o programa `pkg-config --cflags --libs libglade-2.0` -export-dynamic&lt;br /&gt;
&lt;br /&gt;
O que ocorre é que baixo Windows non existe o efecto de sustitución producido polos `acentos`, de xeito que para facelo do mesmo modo é necesario instalar un entorno compatible como [http://www.mingw.org/ MSYS].&lt;br /&gt;
&lt;br /&gt;
[[Image:librerias.jpg|left|thumb|DevCpp: Librerías]]&lt;br /&gt;
&lt;br /&gt;
Outra posibilidade é configurar o IDE de xeito que enlace as librarías e localice as cabeceiras, ou poñendo todo nun Makefile. A información que temos que engadir a podemos obter executando:&lt;br /&gt;
&lt;br /&gt;
  pkg-config --cflags --libs libglade-2.0&lt;br /&gt;
&lt;br /&gt;
E editando as opcións do proxecto para poñer os includes (-Ixxx), as librarías (-lxxx) e as opciones de compilación -xxx. É necesario poñer como opcións de compilación -mms-bitfields -D__WINDOWS__&lt;br /&gt;
&lt;br /&gt;
De todos modos o xeito estándar e recomendado é a creación dun ficheiro &amp;#039;&amp;#039;Makefile&amp;#039;&amp;#039; coas reglas para construir o executable, para facelo podemos redirixir a saída de pkg-config a un ficheiro que editaremos posteriormente:&lt;br /&gt;
&lt;br /&gt;
  pkg-config --cflags --libs libglade-2.0 &amp;gt; Makefile&lt;br /&gt;
&lt;br /&gt;
O seguine Makefile pode servir de patrón para outros proxectos:&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
FLAGS = `pkg-config --cflags --libs libglade-2.0`&lt;br /&gt;
FLAGSC = `pkg-config --cflags libglade-2.0`&lt;br /&gt;
&lt;br /&gt;
programa: programa.c funcions.o&lt;br /&gt;
	gcc programa.c -o progrma funcions.o $(FLAGS) -export-dynamic&lt;br /&gt;
funcions.o: funcions.c&lt;br /&gt;
	gcc -c funcions.c $(FLAGSC) -export-dynamic&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un exemplo de programa multiplataforma pode ser o seguinte:&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
#include &amp;lt;gtk/gtk.h&amp;gt;&lt;br /&gt;
#include &amp;lt;glade/glade.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef __WINDOWS__&lt;br /&gt;
   #define EXPORT __declspec (dllexport)&lt;br /&gt;
#else&lt;br /&gt;
   #define EXPORT&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
// Variable para almacenar o interface gráfico&lt;br /&gt;
//&lt;br /&gt;
GladeXML *__gui;&lt;br /&gt;
&lt;br /&gt;
// Función conectada ó sinal &amp;#039;clicked&amp;#039; do botón de cambiar &lt;br /&gt;
// mensaxe&lt;br /&gt;
//&lt;br /&gt;
EXPORT int cambia_mensaxe(GtkWidget *obj,void *param)&lt;br /&gt;
{&lt;br /&gt;
   GtkWidget *lbl;&lt;br /&gt;
   static int m=0;&lt;br /&gt;
   char *mensaxes[2]={&amp;quot; Hola Mundo &amp;quot;,&amp;quot; Bos Dias &amp;quot;};&lt;br /&gt;
&lt;br /&gt;
   lbl=glade_xml_get_widget(__gui,&amp;quot;label1&amp;quot;);&lt;br /&gt;
   if (m==0) m=1;&lt;br /&gt;
   else      m=0;&lt;br /&gt;
   gtk_label_set_text(GTK_LABEL(lbl),mensaxes[m]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Programa principal. Únicamente carga o interface creado&lt;br /&gt;
// co glade e conecta as sinais.&lt;br /&gt;
//&lt;br /&gt;
int main(int argc,char *argv[])&lt;br /&gt;
{&lt;br /&gt;
   gtk_init(&amp;amp;argc,&amp;amp;argv);&lt;br /&gt;
   &lt;br /&gt;
   __gui=glade_xml_new(&amp;quot;holamundo.glade&amp;quot;,NULL,NULL);&lt;br /&gt;
   glade_xml_signal_autoconnect(__gui);&lt;br /&gt;
   gtk_main();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://web.iesrodeira.com/Descargas/glade3.avi Aquí] podes descargar unha video-demostración de desenvolvemento con glade.&lt;/div&gt;</summary>
		<author><name>Xavi</name></author>
	</entry>
</feed>