[C con Clase] HINSTANCE
Steven Davidson
steven en conclase.net
Dom Abr 8 06:38:59 CEST 2007
Hola Reinel,
El pasado 2007-04-02 13:48:03, Rey escribió:
R> Buenos días mis colegas. ¿Alguno ha trabajado con HINSTANCE? Lo que me sucede es que estoy haciendo un shellexecute a un programa en consola, pero el shellexecute me devuelve un dato de tipo hinstance, y yo necesito tomarlo y verificar a ver si se ejecutó correctamente mi programa dos. Pero es ahí donde
Bien. La documentación de 'ShellExecute()' dice que se retorna un valor de tipo 'HINSTANCE' por motivos de compatibilidad con código de 16 bits; o sea, MS-Windows 3.11 y anteriores. Lo que se debe hacer con dicho valor es hacer un cásting a 'int'. Luego, comprueba si el valor es mayor que 32, para saber que la función ejecutó con éxito. Asimismo puedes usar la siguiente tabla para averiguar el error:
Valor Significado
0 El sistema operativo está sin memoria o recursos.
ERROR_FILE_NOT_FOUND El fichero especificado not fue encontrado.
ERROR_PATH_NOT_FOUND La ruta especificada not fue encontrada.
ERROR_BAD_FORMAT El fichero .exe es inválido (no es Win32® or un error en
la imagen del fichero .exe).
SE_ERR_ACCESSDENIED El sistema operativo niega el acceso al fichero
especificado.
SE_ERR_ASSOCINCOMPLETE La asociación el nombre del fichero es incompleta o
inválida.
SE_ERR_DDEBUSY La transacción DDE no pudo completarse porque otras
transacciones DDE estaban siendo procesadas.
SE_ERR_DDEFAIL La transacción DDE falló.
SE_ERR_DDETIMEOUT La transacción DDE no pudo completarse porque la
petición expiró.
SE_ERR_DLLNOTFOUND La biblioteca especificada de enlace dinámico no fue
hallada.
SE_ERR_FNF El fichero especificado not fue encontrado.
SE_ERR_NOASSOC No existe una asociación a tal aplicación con la
extensión del nombre de fichero dado. Este error
también será retornado si intentas imprimir un
fichero que no es impresionable.
SE_ERR_OOM No hubo suficiente memoria para completar la operación.
SE_ERR_PNF La ruta especificada not fue encontrada.
SE_ERR_SHARE Sucedió una violación de compartir.
R> esté le problema, es un dato void * es decir puntero a nada. ¿Tengo que castear el resultado? ¿Cómo lo logro?
Quiero aclarar que 'HINSTANCE' como concepto no es un 'void *'. Muchas implementaciones definen 'HINSTANCE' como un puntero, pero no deberías tratar su valor como tal.
Espero que esto te ayude.
Steven
Más información sobre la lista de distribución Cconclase