ActiveQT: Mehrdimensionales Array von COM-Server holen
Verfasst: 30. Januar 2008 09:31
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:
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
ndex 0), den Typ
ndex 1) oder die zugeordnete Datenbank
ndex 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:
Und jetzt habe ich zwei Alternative probiert.
Alternative 1:
Hierbei ist das Problem, daß die Liste leer ist, also daß nie in die while-Schleife gesprungen wird.
Alternative 2:
Hierbei ist das Problem, daß pEnvironmentInfoArray ein Null-Pointer ist und in der Debug-Ausgabe steht
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
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 SubDie erste Dimension des Arrays enthält die Variablen-Infos selbst, mit der zweiten Dimension wird festgelegt, ob man den Namen
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ückAlternative 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() )
{
[...]
}Alternative 2:
Code: Alles auswählen
QAxObject* pEnvironmentInfoArray = pEnvironmentInfoObject->querySubObject( "GetInfo()" );Ich bin für jede Hilfe dankbar!QAxBase::querySubObject: GetInfo(): method or property is not of interface type in (null) (unknown)
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