Qt-Resolver el error de excepción "QAxBase::setControl: no se pudo crear una instancia del control XXX solicitado"

Autor: Zhai Tianbao Steven
Declaración de derechos de autor: Los derechos de autor pertenecen al autor. Para reimpresión comercial, comuníquese con el autor para obtener autorización. Para reimpresión no comercial, indique la fuente

planteamiento del problema

       En el proceso de desarrollo de Qt, QAxObject es una clase que a menudo se usa para operar varias interfaces COM en Windows para realizar varias funciones.

       WbemScripting.SWbemLocator es el objeto al que quiero acceder a través de QAxObject, usando el siguiente código, en términos generales, completará la creación de instancias y continuará realizando las operaciones posteriores.

QAxObject *objIWbemLocator = new QAxObject("WbemScripting.SWbemLocator");

       Sin embargo, muchas personas activarán el siguiente mensaje de error, lo que se traduce en el hecho de que no se puede crear una instancia del objeto solicitado.

       Después de muchas investigaciones, descubrí la causa del problema, que se debe a que COM no se inicializó. Dado que QAxObject se usa para operar la interfaz COM, la inicialización de COM también es muy importante.

       La solución al problema es la siguiente.

solución

       La función QleInitialize es una función de la API de Windows . Su función es inicializar la biblioteca del Modelo de objetos componentes (COM) en el apartamento actual (apartamento), identificar el modo de concurrencia actual como STA (apartamento de subproceso único-apartamento de subproceso único) y habilitar algunas funciones adicionales específicamente para la tecnología OLE. A excepción de las funciones de asignación de memoria y CoGetMalloc, la aplicación debe inicializar la biblioteca COM antes de llamar a las funciones de la biblioteca COM.

       Llamamos a la función QleInitialize para inicializar COM antes de la instanciación, como se muestra a continuación. Y llame a la función OleUninitialize para cancelar la inicialización de COM después de la operación. Hasta ahora, el problema está resuelto.

OleInitialize(0);
QAxObject *objIWbemLocator = new QAxObject("WbemScripting.SWbemLocator");
// 系列操作
OleUninitialize();

       Recientemente, estoy revisando muchos proyectos desarrollados con Qt. Es mejor o creo que habrá contenido que algunas personas necesitan. Lo actualizaré en CSDN sincrónicamente, con la esperanza de ayudar a otros. Afectados por la epidemia en los últimos años, la vida y el trabajo de todos son muy difíciles. ¡Espero que el futuro sea mejor cada año y trabajaremos juntos!

       Si el artículo te ayuda, puedes darme un me gusta para avisarme, estaré muy feliz ~ ¡vamos!

Supongo que te gusta

Origin blog.csdn.net/zhaitianbao/article/details/131448765
Recomendado
Clasificación