Wert eines Varianten (String) auslesen
-
Hallo,
bin Newbie in C++, wer hilft mir etwas weiter:Ein Programm übergibt an eine DLL einen String-Wert als Variable (VARIANT),
genauer gesagt ein Datum: 2007-04-21Diesen Varianten muss ich in der DLL jetzt wieder als String auslesen, damit ich den Wert in der DLL weiterverarbeiten kann.
Habe Folgendes gemacht:
HRESULT hResult; VARIANT vDatum; VariantInit(&vDatum); variables[2]->GetValue(&vDatum); //Hier steckt er den Wert der Var.2 in vDatum //Variant in String umwandeln hResult = VariantChangeType(&vDatum, &vDatum, 0, VT_BSTR);
..
weiter unten dann:...
if( strLine.substr(0,10).compare(V_BSTR(&vDatum)) == 0 )
...
in dieser Zeile kommt dann der Fehler:
Konvertierung von 'BSTR' in 'const std::basic_string<_Elem,_Traits,_Ax>' nicht möglich
with
[
_Elem=char,
_Traits=std::char_traits,
_Ax=std::allocator
]
Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutigWie komme ich an den String-Wert des Varianten?
Danke.
-
Hallo
Ausgehend von der Fehlermeldung versuchst du den aus V_BSTR gelieferten Unicode-String in die Methode std::string::substr einzusetzen, das aber einen Ansi-String brauchst. Das verweigert der Compiler natürlich, da er w_char* und char* nicht implizit umwandeln kann.
Um das Problem zu lösen must du nur die Umwandlung von VARIANT in char* machen, mit der passenden WinAPI-Funktionen. ich vermute die lautet V_STR.bis bald
akari
-
akari schrieb:
Hallo
Ausgehend von der Fehlermeldung versuchst du den aus V_BSTR gelieferten Unicode-String in die Methode std::string::substr einzusetzen, das aber einen Ansi-String brauchst. Das verweigert der Compiler natürlich, da er w_char* und char* nicht implizit umwandeln kann.
Um das Problem zu lösen must du nur die Umwandlung von VARIANT in char* machen, mit der passenden WinAPI-Funktionen. ich vermute die lautet V_STR.bis bald
akariHallo,
V_STR stimmt wohl..Habe es jetzt aber so gemacht; um den Varianten erstmal als BSTR zu lesen
BSTR bstr = _bstr_t(&vDatum);
Um ihn danach als string zu bekommen, das ist noch etwas komplizierter..
Scheint nicht gerade einfach zu sein mit den Typen, in C++
-
Hallo
CLange schrieb:
V_STR stimmt wohl..
Warum nimmst du es nicht?
Habe es jetzt aber so gemacht; um den Varianten erstmal als BSTR zu lesen
BSTR bstr = _bstr_t(&vDatum);
Um ihn danach als string zu bekommen, das ist noch etwas komplizierter..
Scheint nicht gerade einfach zu sein mit den Typen, in C++In C++ geht die Umwandlung mittels der locals, auf die Schnelle hab ich nur char* nach w_char* gefunden. Die Gegenrichtung ist aber auch irgendwo im C++ Forum schon besprochen.
Es gibt auch direkte WinAPI-Funktionen die das machen, siehe WinAPI-Forum.Im Builder könnte man auch WideString benutzen, das eine denkbar einfache Konvertierung anbietet :
WideString w = L"Hallo"; // Hier dein w_char* zuweisen AnsiString a = w; // Konvertierung
bis bald
akari
-
Warum nimmst du es nicht?
Weil ich beginner in C++ bin und gerade froh, daß es funzt,
siehe oben.Aber irgendwie müsste das auch so gehen
//Typ festlegenV_VT(xy) = VT_STR V_STR(xy) = ...
Umwandlung BSTR in string, dazu musste ich dann ne eigene Funktion schreiben.
Nutze außerdem gerade VC++ Express, habe keine MFC.
Mit MFC wohl etwas einfacher..
Viele Gr
-
Hallo
CLange_ schrieb:
Warum nimmst du es nicht?
Weil ich beginner in C++ bin und gerade froh, daß es funzt,
siehe oben.Dein vorletzter Post klingt aber nicht so als ob "es funzt"
Aber irgendwie müsste das auch so gehen
//Typ festlegenV_VT(xy) = VT_STR V_STR(xy) = ...
Umwandlung BSTR in string, dazu musste ich dann ne eigene Funktion schreiben.
Nutze außerdem gerade VC++ Express, habe keine MFC.
Mit MFC wohl etwas einfacher..MS VC? MFC? Du bist dir schon im klaren das du hier im Builder-Forum bist?
bis bald
akari