Solución de problemas de excepciones: System.Runtime.InteropServices.COMException

Actualización: noviembre 2007

Cuando una llamada al método COM devuelve un resultado HRESULT desconocido, se produce una excepción COMException.

Sugerencias asociadas

  • Compruebe la propiedad ErrorCode de la excepción para determinar el resultado HRESULT devuelto por el objeto COM.
    Cuando el motor en tiempo de ejecución encuentra un resultado HRESULT desconocido, se produce una excepción COMException, que incluye una propiedad ErrorCode pública que contiene el valor HRESULT que devolvió la llamada. Si el motor en tiempo de ejecución dispone de un mensaje de error, se devuelve dicho mensaje al llamador. 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. HRESULT permite al llamador determinar la causa de la excepción. Para obtener más información, vea Cómo: Asignar resultados HRESULT y excepciones.

  • Deshabilite el proceso de alojamiento.
    COM permite la comunicación entre Visual Studio y el proceso de alojamiento. Dado que se utiliza antes de la ejecución de código, una llamada a CoInitializeSecurity hace que se produzca esta excepción.

Comentarios

El Common Language Runtime (CLR) transforma los resultados conocidos de HRESULT en excepciones de .NET, lo que permite que los objetos COM devuelvan una información de errores significativa a los clientes administrados. El resultado HRESULT de una asignación de excepción también funciona en sentido contrario, ya que devuelve HRESULT específicos a clientes no administrados.

Al pasar parámetros enlazados en tiempo de ejecución a métodos de objetos de Microsoft Office, se puede producir una excepción COMException 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 tiene un descriptor de acceso, .NET Framework genera una excepción MissingMethodException (HRESULT CORE_E_MISSINGMETHOD). Para evitar este comportamiento, utilice los objetos enlazados en tiempo de compilación o pase una variable en lugar de una propiedad del objeto.

Vea también

Tareas

Cómo: Averiguar más sobre una excepción con el Ayudante de excepciones

Conceptos

Controlar excepciones de interoperabilidad COM

Referencia

COMException