Unterschied bStr, string, CString



  • Hallo,

    ich bin noch nicht so fit in der C++ Programmierung und stehe mal wieder vor einem Problem.

    Ich habe eine Funktion die eine _variant_t zurück gibt.
    In diese steht ein String.

    Nun wollte ich den Variant dem string zuweisen. Das geht aber nicht.
    Man kann den nur in eine bStr umwandeln, oder?

    Bzw. Wo sind die unterschiede zwischen bStr, string oder CString.

    Wann benutzt man welchen?

    Gruß
    Stumpf



  • Was ist ein _variant_t ?

    Stumpf schrieb:

    Nun wollte ich den Variant dem string zuweisen.

    wie?

    Stumpf schrieb:

    Das geht aber nicht.

    Wieso?

    cheers, Swordfish



  • So!

    string strReturn;
    strReturn = var_val.bstrVal;
    

    Mir ist klar das bStr nicht einfach => zu string werden kann.
    Aber der zwischen Schritt / Schritte fehlen mir.

    Wie gesagt Anfänger!

    Danke



  • Aha, das ist also ein _variant_t 😉

    so zB:

    #include <iostream>
    #include <string>
    
    #pragma comment( lib, "comsuppw.lib" )
    
    #include <atlbase.h>
    #include <atlconv.h>
    #include <comutil.h>
    
    int main( )
    {
    	USES_CONVERSION;
    
    	_variant_t variant = _T( "Hello!" );
    
    	std::string text( W2A( variant.bstrVal ) );
    	std::cout << text << std::endl;
    }
    

    cheers, Swordfish



  • Thanks! Swordfish!

    Nun funktioniert es! Super Danke, aber ich hab keine Ahnung was ich da gemacht habe!

    Würdest Du mit ein paar Sachen erklären wollen?

    Welche Lib ist das? comsuppw.lib

    Wozu das? USES_CONVERSION;

    Welche Umwandlung läuft da? W2A( )

    Wäre super nett.
    Wenn Du nicht möchtest ist es auch kein Problem!

    Gruß
    Stumpf



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    - comsuppw.lib
    Entält die Compiler COM Global Functions wie z.B. ConvertBSTRToString

    - USES_CONVERSION deklariert einige Variablen damit die ATL Konvertierungs Makros funktionieren.

    - W2A convertiert einen wchar_t null terminierten String * in einen char array.
    Das ganze temporär für den gesamten Scope der Funktion. Die Daten werden auf dem Stack allokiert.
    Also möglichst sowas nicht in einer Schleife verwenden.

    CW2A ist die neue Generation der ATL Makros und braucht USES_CONVERSION nicht. Allokiert allerdings auf dem Heap und der Zeiger ist nur für den kurzen Moment in durch ein temporäres Objekt verfügbar.



  • Super Info!!

    Wie lange macht ihr sowas um all das zu wissen?

    Danke!!


Anmelden zum Antworten