Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QAxObject->dynamicCall() throws Type Mismatch (Solved)



  • Here is my example code (very simple)

    @activex = new QAxObject("832C30D8-7062-44AC-878E-0C7C64B245A8");
    activex->setProperty("Settings", QString("9600,n,8,1") );@

    Throws this (Description in spanish):

    @QAxBase: Error calling IDispatch member Settings: Exception thrown by server
    Code : 13
    Source : Comm32
    Description: No coinciden los tipos (type mismatch)
    Help :
    Connect to the exception(int,QString,QString,QString) signal to catch this exception@

    Using QAxBase::generateDocumentation() clearly says that :

    @QString Settings

    For more information, see help context 23 in C:\WINDOWS\system32\Comm32.chm. 
    
    Read this property's value using QObject::property:
    

    QString val = object->property("Settings").toString();
    Set this property' value using QObject::setProperty:
    QString newValue = ...
    object->setProperty("Settings", newValue);
    Or using the SetSettings slot.@

    .. which is exactly what I'm trying to do.
    Calling dynamicCall( "SetSettings(QString)", QString("9600,n,8,1") ); doesn't help too...

    I must add that using another control like MSComm32 I have no problems (related with Qt, MSComm32 has other more serious problems)

    If it helps, debugging into code I found that the exception is thrown when Qt tries to call Invoke() method of the IDispath class, inside

    @QAxBase::internalProperty@

    At line 3553, file qaxbase.cpp.

    EDIT

    Ok I solved it.
    It happens that the COM control I was trying to use is visual, and I should use QAxWidget instead of QAxObject. So replacing QAxObject by QAxWidget in the code above makes everything work.

    Thank you anyway.


Log in to reply