SysAllocString und CString
-
Guten Morgen!
Folgendes Problem: Ich habe einen bstr dem mit SysAllocString etwas übergeben wird. Das sieht so aus:
bstr = SysAllocString(L"IrgendEinText");
Das L".." ermöglicht ein Literal zu übergeben, ansonsten wird mit SysAllocString Unicode übergeben.
Jetzt soll aber das, was mit SysAllocString übergeben wird, variabel sein. Dazu habe ich einen CString in dem "IrgendEinText" steht. Ich bekomm es nicht hin dass zu übergeben. Wenn ich den CString in die Klammern schreibe (L"varCString") interpretiert er es natürlich als Text. Wenn ich das L"" mit in den CString nehme interpretiert er das L"" nicht und meckert weil ich keinen Unicode übergebe! Kann mir einer helfen? Entweder muss ich irgendwie die Variable übergeben oder den CString in Unicode umwandeln!
Danke
azet
-
Das Literal geht natuerlich nur fuer im code definierte Instanzen, nach dem L muss also die (konstante)zeichenkette folgen und keine Variable .
CString ist nen Wrapper fuer TCHAR* und TCHAR * ist, wenn _UNICODE nicht definiert wird, nen char * und dein BSTR ist ne MBCS mit fuerhender laengenangabe. Theorethisch muesstest den String dann auf 2 byte expandieren, und die laengenangabe schreiben. Dafuer gibts aber systemroutinen, die dir das machen ... .
Komfortabler weise kennt die der CString auch, und erledigt das fuer dich ...
ein :CString strTest = _T("Test"); BSTR strBTest = strTest.AllocSysString();
Macht glaub ich, genau was du willst ...
und nicht vergessen, den BSTR mit SysFreeString wieder freigeben ...
Ciao ...
-
Der erste Teil deines Postings ist für mich zum Teil zwar nur Bahnhof aber da kann man sich ja einlesen..
Auf jeden Fall funktioniert es und ich kann erstmal weiter basteln!! Dankeschön!!
Gruß
azet