Ver por etiquetas

Todas las etiquetas » tips (RSS)

Qué hacer cuando a Visual C++ se le va la pinza en el editor de diálogos

Supongo que le habrá pasado a más de uno, que está haciendo cosas en el editor de diálogos de Visual C++ y de repente se le va la pinza y deja de funcionar como debe, a veces dando un error que no es un error. Esto normalmente se debe a que hay algo mal en el código fuente que impide al parser actuar debidamente. Quizás hemos añadido una entrada mal en el mapa de mensajes, o en el DDX o simplemente el fichero de recursos esté mal. Pero otras...
Publicado por Rafael Ontivero | 1 comment(s)
Archivado en: ,,,

Conversión ANSI a Unicode y viceversa

Seguro que no es la primera vez que te pasa que te dejan una serie de rutinas (generalmente en formato DLL) que reciben cadenas en formato ANSI y tu aplicación está escrita en Unicode, y cuando preguntas si tienen versión Unicode te responden que no y que no la van a tener… Y como no quiero perder mi empleo, voy a parar aquí. Pues bien, existe una forma muy sencilla de pasar cadenas entre ambos formatos sin tener que liarnos con las funciones de conversión...
Publicado por Rafael Ontivero | 3 comment(s)
Archivado en: ,,,

Obtener el propio número de versión desde MFC y Win32 (y II)

Hace poco expliqué cómo obtener el número de versión del propio ejecutable desde C++ Builder utilizando la VCL (su biblioteca de clases) y dejé como pendiente el obtenerla desde Win32 o MFC. Como lo he necesitado, he modificado el código y lo presento aquí: TCHAR appName[MAX_PATH]; GetModuleFileName(AfxGetApp()->m_hInstance,appName,MAX_PATH-1); DWORD handle; DWORD size = GetFileVersionInfoSize(appName, &handle); if(size!=0) { TCHAR *buffer = new TCHAR[size + 1]; GetFileVersionInfo(appName...

Vídeo de introducción al MFC Feature Pack de Microsoft en Microsoft

Bueno, como podéis ver, aunque me queden un par de entradas sobre el Kindle, el RFOG sigue en la brecha de sus cosas de C++ y demás zarandajas, que fue el origen de este Blog. El que haya escrito poco sobre mis temas últimamente se debe a que he tenido mucho trabajo y he estado enormemente ocupado... ¿Qué? ¿No te lo crees? Pues yo tampoco, para serte sincero. Esto de las ganas de escribir en el blog va y viene, y unas veces hay más y otras menos, y...

Cómo abrir máquinas virtuales vmWare en ventanas independientes

Esta es una tarea pendiente que llevaba bastante tiempo detrás de conseguir. Quizás lo que cuente aquí sea evidente para todos menos para mi, pero por si acaso -y para que no se me olvide-, voy a dejar constancia de ello. ¿Qué desarrollador moderno no tiene varias máquinas virtuales para hacer sus experimentos y pruebas? Yo al menos tengo una buena espuerta de ellas, y si bien antes usaba Virtual PC, que no es un mal producto ni de lejos, al carecer de soporte...

Hemos leído: John Lakos: Large-Scale C++ Software Design

Bueno, realmente no lo hemos leído del todo , ya que nos quedan cien de las ochocientas páginas que componen este mamotreto, pero que si no pasa nada caerán esta noche de forma rápida, ya que son varios apéndices. ¿Por dónde empezar? Uf. Es un libro difícil de leer, no por la prosa, sino por el contenido, altamente –muy altamente- técnico. El autor parte de que ya sabes C++, pero no el C++ que puedas aprender en la escuela, sino...
Publicado por Rafael Ontivero | 1 comment(s)
Archivado en: ,,,

La estructura intraducible, I (de Interop y otras yerbas)

A veces resulta curioso cómo algo tan sencillo como mapear una estructura de C en .NET se puede convertir en un algo muy cercano a una pesadilla dependiendo del lenguaje que hayamos elegido para realizarlo. Partamos de la siguiente estructura de C: typedef struct { BYTE byOut[4]; // Outputs [0..3] BYTE byAux; // Aux output } usbOutput; A simple vista es algo muy elemental: un array de cuatro bytes y uno más después. Esto en una máquina Intel en realidad termina ocupando 8 bytes, 4 para el primer...

C++: Insertar un ejecutable dentro de otro… y luego ejecutarlo

Vamos a explicar cómo tomar un ejecutable (o cualquier otro fichero binario), insertarlo dentro de un ejecutable y posteriormente cómo recuperar ese ejecutable embebido, soltarlo a disco y ejecutarlo. El escenario típico es borrar el propio ejecutable que actúa como hospedante, pero seguro que a las mentes calenturientas de mis lectores se les ocurren más aplicaciones. El problema no existía en Windows 95 y siguientes: un programa podía borrar su propio ejecutable y terminar sin ningún problema ...
Publicado por Rafael Ontivero | 5 comment(s)
Archivado en: ,,,

Singleton con y sin Singleton

Ahora que están de moda los antipatrones, voy a explicar un patrón que es muy famoso pero que no me gusta absolutamente nada, no por el diseño del mismo, sino por los efectos laterales no deseados que genera. Por ello también voy a explicar otra forma de construirlo que me gusta más, aunque adolece de otras limitaciones. Singleton es un patrón que nos obliga a tener una sola instancia de una clase, es decir, globalmente sólo podremos disponer de un objeto de ese...
Publicado por Rafael Ontivero | 18 comment(s)
Archivado en: ,,,

La que os espera... (ji ji)

Hará como una hora que he recibido de Amazon mis últimas adquisiciones, que son los seis libros situados en la parte inferior que se pueden contemplar en la foto que acompaña esta entrada... casi 200 euros en libros, sumados a otros doscientos y pico de varios pedidos anteriores... A los de la foto hay que añadir el "Reverse Engineering" sobre el que he comentado y otro sobre patrones, en los que creo poco, por lo menos tal y como se presentan habitualmente (quizás se deba a que en las...

C++/CLI y C# VII: GetLastError en escenarios de interop

Introducción Hay un tema que ha aparecido indirectamente en algunos mensajes del grupo de C# relativo al tema de Interop mediante atributos (que es el único que puede hacer C# y VB.NET), y que desde que estoy leyendo dicho grupo nadie ha advertido o ha tenido algún problema con él, o al menos yo no me he dado cuenta de ello. Cuando uno hace una llamada al API de Win32, muchas funciones devuelven un estado de error a través de un handle inválido o simplemente devolviendo FALSE . Es una consecuencia...
Publicado por Rafael Ontivero | con no comments
Archivado en: ,,

C++/CLI VI: Delegados e hilos

Esta no va a ser una entrada larga explicando qué es un delegado y cómo hacer cositas con él. Esta va ser una entrada de hombres para hombres, es decir, una entrada en la que explico algo que he leído en C++/CLI in Action y que considero muy interesante y muy cuca. Vamos a utilizar un delegado para crear un hilo... pero sin hilos; voy a explicar cómo utilizar un delegado asíncrono para bifurcar el hilo principal de la aplicación y realizar dos tareas simultáneas. Seguro que más de uno en sus programas...
Publicado por Rafael Ontivero | 3 comment(s)
Archivado en: ,,

TIP: Filtrar números en un campo de edición

Si uno quiere aplicar una máscara dentro de un campo de edición, tiene a su disposición el componente MaskEdit, que posee una propiedad llamada Mask y que, asignando ahí una serie de símbolos predefinidos, nos guiará a la hora de qué texto podemos introducir. Perfectamente válida en muchas situaciones, en otras es un engorro de lo más complicado, ya que, aunque la potencia del filtrado es enorme, a veces no nos permite una flexibilidad adecuada. En mi caso no he podido encontrar la máscara adecuada...

Al rico video fresquito

Estaba yo aburrido en un lugar de la Mancha oriental, de cuyo nombre sí que me acuerdo pero no quiero citar, cuando trasteando aquí y allí, sin rocín flaco y con la adarga en la casa de campo de mis padres, vi una entrada curiosa por los interneses: Una espuerta de vídeos que enseñan cómo hacer un montón de cosas con las herramientas de Microsoft. Dado que el que suscribe, sin lanza y sin Yelmo de Mambrino, se dedica al mundo del C++, sólo pone el enlace para vídeos relacionados con temas que le...
Publicado por Rafael Ontivero | con no comments
Archivado en: ,,,

TIP: Instalar cualquier SDK de Windows CE 5.0 en Vista

Justo esta mañana me he dado en los dientes con una piedra bien gorda. De nuevo vuelvo a la zanja del Windows CE 5.0 (mis primeras entradas en esta bitácora tienen algunas entradas sobre él), para actualizar algunas cosillas antiguas y certificar nuestros productos para cierta placa que corre una versión muy modificada de dicho sistema operativo (tan modificada que se ha sustituido el GDI por uno propio, se ha eliminado casi todo el USER.DLL, y el arranque es completamente nuevo –y diferente). Está...

Reiniciar Windows desde .NET

En anteriores entradas comenté que explicaría cómo reiniciar Windows desde un programa hecho en .NET. Hasta donde yo sé el .NET Framework no tiene un API para cerrar la sesión actual o para reiniciar el sistema, así que tenemos que hacer las llamadas oportunas al código nativo. En Win32 hay dos funciones para realizar la tarea, la original, ExitWindows y otra más moderna y que permite más cosas, ExitWindowsEx . Pero si probamos a llamarlas directamente nos damos cuenta de que Windows nos ignora por...
Publicado por Rafael Ontivero | 3 comment(s)
Archivado en: ,,,

Ejecutar un programa antes de que se inicie Windows (y II)

En la entrada anterior hablaba sobre cómo lanzar un programa para que se ejecute antes del inicio de Windows basado en mis propias investigaciones. Tras un comentario de Peni, decidí probar un programa cualquiera… para descubrir que no funciona. Un sesudo destripe de los dos programas que sé lo hacen, a saber, PDBoot.exe y autochk.exe comenzó a darme una ligera idea de qué es necesario. Para ello el que suscribe abrió una consola de comandos del Visual Studio, se fue a C:\Windows\System32 y ejecutó...
Publicado por Rafael Ontivero | 8 comment(s)
Archivado en: ,,

Ejecutar un programa antes de que se inicie Windows

Seguro que cualquier usuario de Windows ha visto cómo justo en medio del arranque de su PC, se modifica la pantalla de inicio de forma un tanto extraña y se inicia un chequeo del disco duro. O si utiliza herramientas como el Acronis Disk Director, tras el pertinente reinicio se lanzan en dicho lugar las herramientas, o también con los desfragmentadores comerciales como el Perfect Disk o el Diskeeper. ¿Cómo puede hacer uno eso mediante código para, por ejemplo, forzar un chequeo del disco de sistema...
Publicado por Rafael Ontivero | 8 comment(s)
Archivado en: ,,

Forzar la carga de drivers no firmados en Windows Vista x64

Corrección Para escarnio y pública befa propia, lo escrito más abajo, por desgracia, no funciona Y que conste que lo he comprobado. Pero me parece a mi que se trata de la misma opción que arrancar pulsando F8, es necesario ejecutarlo cada vez que queramos que el siguiente reinicio sea con drivers sin firmar... En fin, que en lugar de borrar la entrada la dejo para rechifla propia y ajena. Ahora el texto original: En primer lugar decir que la idea o el truco no es mío, sino de un tal John Savill,...
Publicado por Rafael Ontivero | 10 comment(s)
Archivado en: ,

Trabajar con doble buffer en un Panel

Generalmente cuando trabajo con gráficos suelo pintar sobre el área cliente de la propia ficha, pero esta vez he tenido que hacerlo por narices en un panel. Activar el sistema de doble buffer de una ficha es muy sencillo, tenemos que cambiar su estilo y aplicarlo. Algo así: this .SetStyle( ControlStyles .OptimizedDoubleBuffer | ControlStyles .ResizeRedraw | ControlStyles .AllPaintingInWmPaint, true ); this .UpdateStyles(); El primer valor de ControlStyles indica que se va a activar el doble buffer...
Publicado por Rafael Ontivero | 2 comment(s)
Archivado en: ,
Más artículos Página siguiente >