Seite 1 von 1

ActiveQT: Mehrdimensionales Array von COM-Server holen

Verfasst: 30. Januar 2008 09:31
von Michael960
Hi!

Ich habe folgendes Problem: Ich muß aus CANoe (CAN-Bus-Analyse-Software der Firma Vector; Standard in der Automobil-Industrie) eine Liste aller Umgebungsvariablen auslesen.

In der Hilfe von CANoe ist ein Beispiel-Programm gegeben, leider in Visual Basic:

Code: Alles auswählen

Private Sub Form_Load()
    Set CANoe = CreateObject("CANoe.Application")

    info = CANoe.environment.createinfo.getinfo ' Zweidimensionales Array
    
    For i = LBound(info, 1) To UBound(info, 1)
        ListBox1.AddItem (info(i, 0))
    Next
End Sub
Dieses Programm funktioniert und macht genau das was ich will, das habe ich ausprobiert.

Die erste Dimension des Arrays enthält die Variablen-Infos selbst, mit der zweiten Dimension wird festgelegt, ob man den Namen (Index 0), den Typ (Index 1) oder die zugeordnete Datenbank (Index 2) haben will. Ich will nur den Namen, also immer Index 0 in der zweiten Dimension.

Was ich also bräuchte, wäre eine Übersetzung des obigen Programms nach Visual C++ / QT 3.2.1

Bereits probiert habe ich folgendes:

Code: Alles auswählen

QAxWidget* pCANoe = new QAxWidget( "CANoe.Application" );
QAxObject* pEnvironment = pCANoe->querySubObject( "Environment" );
// Bis hier hin funktioniert sicher alles, den ich habe schon auf andere Unterobjekte von Environment erfolgreich zugegriffen.

QAxObject* pEnvironmentInfoObject = pEnvironment->querySubObject( "CreateInfo()" );
// Das scheint auch noch zu funktionieren. Zumindest kommt kein Null-Pointer zurück
Und jetzt habe ich zwei Alternative probiert.

Alternative 1:

Code: Alles auswählen

QVariant EnvironmentInfoArray = pEnvironmentInfoObject->dynamicCall( "GetInfo()" );
QValueList<QVariant> EnvironmentInfoList = EnvironmentInfoArray.asList();
QValueList<QVariant>::Iterator it = pEnvironmentInfoList.begin();
while( it != pEnvironmentInfoList.end() )
{
    [...]
}
Hierbei ist das Problem, daß die Liste leer ist, also daß nie in die while-Schleife gesprungen wird.

Alternative 2:

Code: Alles auswählen

QAxObject* pEnvironmentInfoArray = pEnvironmentInfoObject->querySubObject( "GetInfo()" );
Hierbei ist das Problem, daß pEnvironmentInfoArray ein Null-Pointer ist und in der Debug-Ausgabe steht
QAxBase::querySubObject: GetInfo(): method or property is not of interface type in (null) (unknown)
Ich bin für jede Hilfe dankbar!

Auch habe ich noch nicht so ganz verstanden, wann man querySubObject(...) und wann man dynamicCall(...) nehmen muß. Auch hier bin ich dankbar, wenn jemand eine Erklärung hat :-)

Gruß aus Weissach,
Michael