Clase System.Runtime.InteropServices.COMException

En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.

La COMException clase es la excepción que se produce cuando se devuelve un HRESULT no reconocido desde una llamada al método COM.

Common Language Runtime transforma hrESULTs conocidos en excepciones de .NET, lo que permite que los objetos COM devuelvan información de error significativa a los clientes administrados. La asignación HRESULT-to-exception también funciona en la otra dirección devolviendo HRESULT específicos a clientes no administrados. Para obtener más información sobre la asignación, consulte Asignación de HRESULT y excepciones.

Cuando el tiempo de ejecución encuentra un HRESULT desconocido (un HRESULT que carece de una excepción específica y correspondiente), produce una instancia de la COMException clase . Esta excepción de uso completo expone los mismos miembros que cualquier excepción y hereda una propiedad pública ErrorCode que contiene el HRESULT devuelto por el destinatario. Si hay un mensaje de error disponible para el tiempo de ejecución (obtenido de la interfaz IErrorInfo o del Err objeto en Visual Basic, o en algunos casos del sistema operativo), el mensaje se devuelve al autor de la llamada. Sin embargo, si el desarrollador de componentes COM no incluye un mensaje de error, el motor en tiempo de ejecución devuelve el valor HRESULT de ocho dígitos en lugar de una cadena de mensaje. Tener un HRESULT permite al autor de la llamada determinar la causa de la excepción genérica.

Control de una excepción COMException

A continuación se indican algunas consideraciones para solucionar una COMException excepción.

Compruebe la ErrorCode propiedad Cuando el tiempo de ejecución encuentre un HRESULT desconocido y produzca una COMException excepción, la ErrorCode propiedad incluye el mensaje de error o, si un mensaje de error no está disponible, el valor HRESULT de ocho dígitos. El mensaje de error o el valor HRESULT pueden ayudarle a determinar la causa de la excepción.

Para obtener una lista de valores HRESULT comunes, consulte Valores HRESULT comunes.

Al pasar argumentos enlazados en tiempo de ejecución a métodos de objetos de Microsoft Office, se puede producir una COMException excepción cuando los objetos son objetos COM. El enlazador en tiempo de ejecución supone que tales llamadas al método implican un parámetro ByRef y que la propiedad que se pasa tiene un descriptor de acceso set . Si la propiedad no lo hace, .NET genera una MissingMethodException excepción (con un CORE_E_MISSINGMETHOD HRESULT ). Para evitar este comportamiento, utilice los objetos enlazados en tiempo de compilación o pase una variable en lugar de una propiedad del objeto.

COM se usa para comunicarse entre Visual Studio y el proceso de hospedaje. Dado que se usa antes de que se ejecute el código, una llamada a CoInitializeSecurity hace que se produzca esta excepción. En algunos casos, ejecutar Visual Studio como Administración istrator puede resolver el problema. También puede deshabilitar el proceso de hospedaje.

Iniciar una excepción COMException

Aunque puede usar la COMException clase para devolver recursos HRESUL específicos a clientes no administrados, iniciar una excepción específica de .NET es mejor que usar una excepción genérica. Tenga en cuenta que los clientes administrados, así como los clientes no administrados, pueden usar el objeto .NET y producir un HRESULT en un llamador administrado es menos comprensible que iniciar una excepción.