Zugriff auf Safearray mit C++ Methoden?
-
Hi!
Ich greife mit VC++ 2008 auf ein über die COM-Schnittstelle arbeitendes Programm zu und konvertiere mir die _variant_t Werte direkt in ein passendes Format:
int laneWidth = (int) link->GetAttValue("LANEWIDTH");
Nun habe ich Probleme auf ein im _variant_t liegendes zwei elementiges Safearray zuzugreifen.
link->GetAttValue("POINTS");
Hat jemand einen Ahnung, wie ich mit C++-Mitteln an die beiden ints/doubles kommen kann?
Normalerweise programmiere ich in Java oder C++
Danek schon mal voran!
Markus
-
Es gibt keine guten C++ Klassen für SafeArray.
Mach Dich mit der SafeArray Syntax vertraut, nutze SafeArrayAccessData oder SafeArrayGetElement!
-
Hi!
Danke erstmal
So richtig komme mich mit SafeArrayAccessData allerdings nicht weiter, da ich nicht wirklich weiß in welchen Format die Daten abgespeichert sind.
Als Hilfe habe ich nur den VB-Snytax:
[in] BSTR Attribute : attribute name (see below) [out, retval] VARIANT *pValue : returned value of the attribute Example length = link.AttValue(„LENGTH“) polyline = link.AttValue(„POINTS“) FOR i = LBOUND(polyline) TO UBOUND(polyline) x = polyline (i).X y = polyline (i).Y NEXT i
Ich habe daher vermutet, dass vielleicht das Safearray direkt zurückgegeben wird:
SAFEARRAY x = link->GetAttValue("POINTS");
Hierbei kommt es allerdings mit zu einer Fehlermeldung, da der Rückgabetyp _variant_t ist und ein Casten in ein Safearray nicht möglich ist ...
Hat jemand eine Idee, wie ich konkret an die Wertepaare im Safearray kommen kann?
Gruß
JackShepard
-
Hallo,
JackShepard schrieb:
Hi!
Danke erstmal
So richtig komme mich mit SafeArrayAccessData allerdings nicht weiter, da ich nicht wirklich weiß in welchen Format die Daten abgespeichert sind.
Als Hilfe habe ich nur den VB-Snytax:
[in] BSTR Attribute : attribute name (see below) [out, retval] VARIANT *pValue : returned value of the attribute Example length = link.AttValue(„LENGTH“) polyline = link.AttValue(„POINTS“) FOR i = LBOUND(polyline) TO UBOUND(polyline) x = polyline (i).X y = polyline (i).Y NEXT i
Ich habe daher vermutet, dass vielleicht das Safearray direkt zurückgegeben wird:
SAFEARRAY x = link->GetAttValue("POINTS");
Hierbei kommt es allerdings mit zu einer Fehlermeldung, da der Rückgabetyp _variant_t ist und ein Casten in ein Safearray nicht möglich ist ...
Hat jemand eine Idee, wie ich konkret an die Wertepaare im Safearray kommen kann?
Gruß
JackShepard
_variant_t ist nur ein Wrapper für VARIANT, du hast also auch Zugriff auf den Zeiger parray, der auf das SAFEARRAY verweist. Elemente kann man dann direkt mit SafeArrayGetElement holen:
long index = 0; int x = 0, y = 0; // oder double _variant_t points = link->GetAttValue("POINTS"); SafeArrayGetElement(points.parray, &index, &x); ++index; SafeArrayGetElement(points.parray, &index, &y);
MfG,
Probe-Nutzer