2010-10-14 22 views
6

Cuando se ejecuta una aplicación desde el IDE y se adjunta el depurador, se produce la excepción 'Excepción externa C0000008' cuando intenta conectarse a un control ActiveX importado.Delphi - Excepción externa C0000008 cuando la aplicación se ejecuta desde el IDE

Si la aplicación se ejecuta de forma independiente o las opciones de Rad Studio/Opciones del depurador/depuración integrada no están marcadas, el programa funciona como se esperaba, no hay excepción y el control ActiveX devuelve el resultado esperado.

Hay otros controles ActiveX en el proyecto, todos los cuales funcionan bien.

que he intentado: - Volver a instalar el control ActiveX - volver a importar el control ActiveX - Extracción de cualquier software que pueda estar causando conflictos (expertos/plug-ins, etc.) - Apagar la mayoría de las aplicaciones y servicios, etc. funcionamiento en caso de que estén causando un conflicto

Buscando Google, Parece que otros han tenido el mismo problema, pero no hay ninguna solución (aparte de desactivar la depuración integrada, pero obviamente esa no es una opción válida).

¿Alguien tiene alguna idea? para mirar para arreglar este problema?

Estoy utilizando Delphi 2007

Respuesta

2

C0000008 es el estado devuelto para un identificador no válido. Asegúrese de que su envoltorio, cuando se trata de crear el objeto, le dé un asa adecuada y no nula (suponiendo que se cuelga debido a un identificador de Windows).

Dado que la aplicación funciona bien cuando no está conectada al depurador, supongo que el envoltorio está manejando esta condición correctamente, por lo que es muy probable que el error ocurra dentro de un bloque try/except.

2

Es una combinación de comportamiento de función no obvio y opciones IDE.

MSDN CloseHandle

Si la aplicación se ejecuta bajo un depurador, la función será una excepción si se recibe o bien un valor de identificador que no es válido o un valor pseudo-mango. Esto puede suceder si cierra un identificador dos veces o si llama a CloseHandle en un identificador devuelto por la función FindFirstFile en lugar de llamar a la función FindClose.

Así que hay dos opciones: o verifique el código de un lugar donde se está cerrando algún identificador no válido o desactive la notificación de IDE de esta excepción. Vaya a Tools > Options > Debugger options > Emb debuggers > Native OS exceptions, encuentre el artículo Invalid Handle y cambie la opción On resume al Run handled. Esto funcionó para mí.

Créditos de esta solución vaya al _Vasilisk_ del foro sql.ru.

Cuestiones relacionadas