[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