|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Karman
26
« en: Sábado 1 de Septiembre de 2007, 04:44 »
La verdad nunca escuché de dichas librerías... que SO usas?
27
« en: Sábado 1 de Septiembre de 2007, 04:20 »
[Editado]
S2
28
« en: Sábado 25 de Agosto de 2007, 21:00 »
fijate esta función, la creé en base a la documentación en el MSDN(solo funciona con XP, esa es su gran limitación): WORD GetDevicesNumber(const GUID* DeviceGUID,PDEVICES device){ HDEVINFO hdev; SP_DEVICE_INTERFACE_DATA did; PSP_DEVICE_INTERFACE_DETAIL_DATA pdidd; DWORD cbRequired,idev; hdev=SetupDiGetClassDevs(DeviceGUID,0,0,DIGCF_PRESENT|DIGCF_DEVICEINTERFACE); if (hdev != INVALID_HANDLE_VALUE) { did.cbSize = sizeof(did); for(idev=0;idev < 100; idev++) { SetLastError(ERROR_NO_MORE_ITEMS); if(SetupDiEnumDeviceInterfaces(hdev, 0, DeviceGUID, idev, &did)) { if(device!=NULL){ cbRequired = 0; if(SetupDiGetDeviceInterfaceDetail(hdev, &did, 0, 0, &cbRequired, 0)||GetLastError() == ERROR_INSUFFICIENT_BUFFER) { pdidd = (PSP_DEVICE_INTERFACE_DETAIL_DATA)LocalAlloc(LPTR, cbRequired); if (pdidd) { pdidd->cbSize = sizeof(*pdidd); if(SetupDiGetDeviceInterfaceDetail(hdev, &did, pdidd, cbRequired, &cbRequired, 0)) { strcpy(device[idev].DevicePath,pdidd->DevicePath); } LocalFree(pdidd); } } } }else { if(GetLastError() == ERROR_NO_MORE_ITEMS) break; } } SetupDiDestroyDeviceInfoList(hdev); } return idev; }
donde: const GUID* DeviceGUID es el guid del tipo de dispositivo a detallar (el mismo que utilizabas anteriormente) y PDEVICES es un puntero a la siguiente estructura: typedef struct _DEVS_{ DISK_GEOMETRY Geometry; LARGE_INTEGER DriveSize; LARGE_INTEGER BufferSize; char Model[64]; char Revision[64]; char Serial[64]; char DevicePath[MAX_PATH]; char DeviceName[32]; }DEVICES,*PDEVICES;
Saludos
29
« en: Martes 21 de Agosto de 2007, 21:52 »
No, no es de pago y lo maximo es que el codigo fuente esta incluido con el Visual Studio 2005 en la carpeta VC\atlmfc\src\mfc. Incluso hay un .mak para generar tanto ATL como MFC en x86, AMD64 y IA64 (incluso una MFC estatica - .LIB -). ¿Eso si es gracioso, no?
PD. Bajo ningun concepto estoy diciendo que la MFC sea Open Source, ni siquiera se si podes redistribuir los binarios generados.
Me quedó una duda... las MFC no son pagas... eso lo entendí... pero poder usarlas necesitás Visual Studio (que tenes que pagarlo)... entonces... por propiedad transitiva no sería como que las MFC son pagas? (indirectamente, obvio) Saludos
30
« en: Martes 21 de Agosto de 2007, 21:47 »
Lo que yo dije fue esto: En realidad esa costumbre es perjudicial a la larga, lo ideal es usar un depurador en tiempo de ejecucion. No creo ser capaz de cuantificar el beneficio que se obtiene con esta practica.
Primero que aprenda a programar... después a debugear... sinó pasa lo que mensionó "Karkayu", que esperan que se aprenda todo de golpe... Ese argumento es muy facil de rebatir: millones de moscas comen mierda. Por otro lado que yo recuerde en la filtracion de Windows NT 4.0 y 2000 no habia una sola linea que correspondiera al Kernel.
Si para vos eso es comer mierda... no digo más nada...  ... además... yo no dije nada de Kernel... o si?... jo Saludos PD: tratá de no ser tan soberbio... let it be...
31
« en: Martes 21 de Agosto de 2007, 20:10 »
eso no implica que sea pago, hasta donde se hay versiones gratuitas del compilador y visual studio. no es lo mismo que libre, pero si son gratis La versión Libre de Visual Studio (por lo menos la que yo bajé de Microsoft) que si no me equivoco se llama "Express", no incluye las MFC, por eso pregunto... si se puede descargar de algún lado estaría bueno... Saludos
32
« en: Martes 21 de Agosto de 2007, 20:06 »
Naa... es obvio que no se soluciona con eso...  , pero se puede ver hasta donde va corriendo bien el ejecutable... Además... no sé que tan complicados sean tus proyectos... pero hasta hora en los que he trabajado... recompilar no toma más de 30 segundos... es más... el error que le acabo de encontrar al código posteado lo hice así en 2 minutos... debugueando no sé si será tan rápido... Con vos lo que pasa es que no te podes bajar de tu nivel de programador "experto", pero para el que posteó el código originalmente (que se nota a leguas que está comenzando a programar) le es más práctico lo de los mensajesitos que lo del debug... Sin ir más lejos... (quizás sea un error comun... je) pero muchos de los códigos que andan dando vuelta en la red utilzan este método para debuguear (incluso hasta el código fuente de Win 2000) Saludos
33
« en: Martes 21 de Agosto de 2007, 18:22 »
No es de pago la MFC? huuu espectacular... donde puedo descargarla para usarla en compiladores no Microsoft como GCC???
Y lo de publicarlo acá no fué para que bajen el código... sinó para ver que opinan de la idea...
Saludos
34
« en: Martes 21 de Agosto de 2007, 18:14 »
Estube revisando tu código... y tu error está al definir la estructura TEmpleado porque definís dni[9] y almacenás un número de 9 dígitos, osea... te falta el caracter de fin de linea, entonces al correr tu programa al principio guardás la dirección correctamente, y al guardar el DNI el caracter de fin de linea se escribe en la variable direccion[80], por eso funciona bien hasta que actualizás donde almacenás algo en dicha variable borrando el carater de fin de linea.
Con respecto al tema del FOR o el WHILE, es indiferente su uso... en ambos casos se pueden definir sentencias de fin (condiciones boleanas, break, continue) el tema es saber utilizar estas sentencias, y con respecto al tema de la depuración, personalmente estoy a favor de los mensajitos antes que un programa de debug, no por un tema de desconocimiento, sinó por practicidad, es más... para mi no representa una pérdida de tiempo colocar pequeñas sentencias de printf o messagebox cada cuanto para ver el comportamiento del programa, sobre todo cuando aparecen fallas muy descolocadas o por errores en el compilador... aunque aveces una mezcla de ambos es muy productivo... como debuger suelo utilizar el win32 dassembler, que es liviano y bastante facil de usar...
Saludos
35
« en: Jueves 2 de Agosto de 2007, 22:20 »
[Editado]
S2
36
« en: Jueves 2 de Agosto de 2007, 02:43 »
Ese tipo de errores suele ser común, ya que en realidad el pintado de un area debe realizarce al resivir el mensaje del sistema WM_PAINT, de todas formas logré que funcione el código de la siguiente manera: /////////////////////////////////// //compile as console mode app #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ HWND h; HDC hdc; SetLastError(0); char s[]="Texto"; // texto que quiero pintar de rojo h = FindWindow("ConsoleWindowClass", NULL); // obtengo el handle hdc=GetDC(h); // obtengo el handle del contexto SetTextColor(hdc,0xff00FF); // defino el color rojo.. TextOut(hdc, 30, 25, s, lstrlen(s)); // intento pintarlo en el area cliente de la ventana ValidateRect(h,NULL); system("pause"); }
con ValidateRect(h,NULL) excluís una parte (o toda como en este caso) de la pantalla de la próxima "pintada" de windows... S2
37
« en: Miércoles 1 de Agosto de 2007, 22:26 »
Mirá... básicamente existen dos formas de importar funciones de una DLL en c++, la primera (y más orientada a objetos), exportando la clase; la segunda (y más orientada a su uso en general pudiendo ser usada en C) mediante Wrapper (algo así como sobreescritura), y ahora que lo pienso tendría que hacer un artículo sobre esto tb... je... volviendo al tema, como yo te decía era de la segunda forma, pero supongo que vos necesitas orientada a objetos pura, entonces el método es el siguiente: Código DLL:dll.h: #ifndef _DLL_H_ #define _DLL_H_ #define DLLExport __declspec (dllexport) class DLLExport DllClass{ public: DllClass(); virtual ~DllClass(void); void Hello(void); private: }; #endif /* _DLL_H_ */
dll.cpp: #include <windows.h> #include "dll.h" void DllClass::Hello(){ MessageBox(0,"hola","holaa",0); } DllClass::DllClass(){} DllClass::~DllClass (){} BOOL APIENTRY DllMain (HINSTANCE hInst,DWORD reason,LPVOID reserved){ switch (reason){ case DLL_PROCESS_ATTACH: break; } return TRUE; }
Código Programa:main.h: #ifndef _DLL_H_ #define _DLL_H_ #define DllImport __declspec (dllimport) class DllImport DllClass{ public: DllClass(); virtual ~DllClass(void); void Hello(void); private: }; #endif /* _DLL_H_ */
main.cpp: #include <windows.h> #include <cstdlib> #include "main.h" DllClass dllclass; int main(int argc, char *argv[]){ dllclass.Hello(); system("PAUSE"); return EXIT_SUCCESS; }
el otro método se diferencia porque se definen wrappers o dicho de otra manera, se sobreescriben las funciones: void *CrearObj(void){ DllClass *tmp; tmp=new DllClass; return (void *)tmp; } void EliminarObj(void *obj){ DllClass *tmp; tmp=(DllClass *)obj; delete tmp; } void Hello(void *obj){ DllClass *tmp; tmp=(DllClass *)obj; tmp->Hello(); }
y así suscesivamente... S2
38
« en: Lunes 30 de Julio de 2007, 00:27 »
No importa que el compilador te cree un fichero .def, no tiene nada que ver... fijate acá: Vinculando LibreríasS2
39
« en: Jueves 26 de Julio de 2007, 15:03 »
tenes que exportarlas con listas ".def", no con __declspec (dllexport), te quedaría algo así:
"mydlldef.def":
LIBRARY MYDLL //Nombre de nuestra DLL DESCRIPTION 'Librería de ejemplo'
EXPORTS //Funciones Exportadas myFunction @ 1 myFunction2 @ 2 myFunction3 @ 3
Cualquier cosa fijate en mi web en la parte de vinculación de librerías
S2
40
« en: Miércoles 4 de Julio de 2007, 15:08 »
con este conjunto de funciones podes recorrer un directorio: char dir[]="c:\\"; struct dirent *pfile;DIR *opdir; struct stat ptarch; if((opdir=opendir(dir))==NULL){ printf("Acceso Denegado a %s\n",orig); return -1; } if((pfile=readdir(opdir))!=NULL){ do{ if((strcmp(pfile->d_name, "."))&&(strcmp(pfile->d_name,".."))){ stat(opath,&ptarch); if(S_ISDIR(ptarch.st_mode)){ //listar directorios }else { //listar archivos... } } }while((pfile=readdir(opdir))!=NULL ); }
S2
41
« en: Miércoles 4 de Julio de 2007, 05:25 »
char *ruta;
es un puntero (apunta a un string), es obvio que no podes almacenar una dirección ahí... para hacerlo (mediante punteros) tendrías que reservar memoria... pero es algo complicado... así que te doy la respuesta corta:
char ruta[MAX_PATH]; gets(ruta);
S2
42
« en: Viernes 29 de Junio de 2007, 05:03 »
para editar una librería o un ejecutable (sin tener el código fuente) deberías usar un disassembler (te recomiendo el W32DASM) pero la edición que podrás hacer es remplazante (no podés agregar ni quitar sentencias... solo reemplazarlas), fuera de eso... si lo que quieres es modificar los diálogos, imágenes, textos y otras cosas (recursos) podes usar el ResHacker o una versión más profesional (pero freeware) el PE Explorer...
S2
43
« en: Viernes 29 de Junio de 2007, 04:57 »
les resumo la historia de la librería "conio.h", básicamente al no ser una librería standart muchos de sus métodos no están contemplados del todo por por los compiladores que no sean Borland, y en lo que se refiere al S.O. no existen todas las funciones definidas en conio.h en la DLL base de C que es: "msvcrt.dll" que es la que incluye las implementaciones de la mayoría de las funciones estándares de C, es por este motivo que existe una "emulación" de la librería "conio.h" que incluye las funciones no incluidas en la cabecera "conio.h" que trae el compilador por defecto, esta segunda librería incluye un archivo "conio.c", que trae las implementaciones de dichas funciones con las APIS de consola de Windows... es más... en mi sitio posteé esta librería con compatibilidad para DevCpp y Visual C, cualquier cosa fijence...
ah... y otro tema... cuando te hablo de incluir "conio.c" no hablo de incluirlo con un #include, sinó como un archivo del proyecto, básicamente sería así:
en el código fuente: #include "conio.h"
y en el proyecto (en la barra de menús del devcpp): Proyecto->Añadir a Proyecto->"conio.c"
S2
44
« en: Sábado 16 de Junio de 2007, 19:09 »
jo... se me hizo que eras el que la posteó... S2
45
« en: Sábado 16 de Junio de 2007, 18:08 »
pero te estás respondiendo solo... eso es lo que no se entiende... qué queres hacer? preguntas como hacer algo y abajo pones la respuesta... no tiene mucho sentido...
S2
46
« en: Sábado 16 de Junio de 2007, 18:04 »
una sentencia vacía es cuando se llama a alguna de las sentencias del lenguaje sin definir una acción, osea... se la termina con ; sin especificar nada:
int i=10000; while((i--)>0); //no hace nada pero provoca una pausa...
o por ejemplo:
char *p="una cadena de texto"; for (n=0;*(p++)!='\0';n++); // enunciado vacío que cuenta la cantidad de caracteres del string...
S2
47
« en: Sábado 16 de Junio de 2007, 17:51 »
la verdad no se entiende lo que querés decir ni lo que queres hacer... tratá de explicarte mejor...
S2
48
« en: Lunes 4 de Junio de 2007, 14:49 »
Si trabajas sobre la consola de windows, aunque getch no es estándart igual viene implementada por Windows en la librería MSVCRT.DLL, la cual como ya expliqué alguna vez, contiene todas las implementaciones de las funciones estándares de C y algunas otras más como ésta justamente... para poder usar getch solo debes o incluir la librería conio.h o incluir esta línea: #ifdef __cplusplus extern "C" { #endif _CRTIMP int __cdecl getch (void); #ifdef __cplusplus } #endif
S2
49
« en: Martes 22 de Mayo de 2007, 04:35 »
en mi pag en la parte de artículos -> explicación de artículos, hay una librería para resolver operaciones matemáticas en In-Fijo, fijate como lo planteé y capaz puedas sacar algo que te sirva...
S2
50
« en: Viernes 18 de Mayo de 2007, 18:06 »
son jodido lo gráfico ehh?
|
|
|