CString -> unsigned short*



  • Hallo .. ich weiß das alle sagen dass folgende Typenumwandlung
    in der FAQ stehen soll. .. steht sie aber nicht, und wenn man das
    sagt sollte man gleich einen Link mit reinschreiben oder. ??!

    Suche: MFC FAQ : CString short
    bringt nichts

    ich will ein CString an einen unsigned short* Parameter übergenen und beiß
    mich da schon Stunden lang ..

    pse help

    rgs!



  • eigendlich nicht unsigned short* .. das sagt nur der Compiler..

    hr=StgOpenStorage ( L"C:\\bla.txt", NULL, STGM_READ | STGM_DIRECT | STGM_PRIORITY, NULL, 0, &pIStorage );

    funktioniert. aber wie mit einen CString als ersten para..

    heul



  • übergeb es doch mit strdup an einen char*. Ich wüsste nicht wofür du unsigned short* brauchst... Naja, höchstens wenn du mit unicode arbeiten würdest bräuchtest du einen WCHAR*... wcsdup wäre AFAIK in diesem Fall die Lösung



  • Es gibt 2 'gute' Möglichkeiten:

    1. Du compilierst Dein Projekt in Unicode, damit hast Du aber Probleme unter Win98. Läuft aber besser unter WinNT

    2. Du benutzt die Konvertierungsmakros T2CW; T2COLE und andersrum OLE2CT; W2CT ...; Achtung, das Makro USES_CONVERSION nicht vergessen!



  • @MastaH

    wcsdup kopiert 1:1. Verlangt wird aber eine Konvertierung von UCHAR nach USHORT bzw. MultiByte to WideChar! Daher auch der Befehl in der API MultiByteToWideChar



  • @René G
    Deswegen habe ich ja gesagt AFAIK. Wusste nicht mehr genau wie das geht. Arbeite auch seeeeeehhhhhr selten mit Unicode-Projekten 😃



  • .. Erstmal Danke! für eure Bemühungen.

    Ja ihr habt recht gehabt. Ich arbeite hier mit Unicode und habe sogar aus einem
    alten Project ne Konvertierung rausfischen können*g:

    #define UNICODE 1
    // nicht alle werden gebraucht
    #include "afx.h"
    #include "stdafx.h"
    #include <afxwin.h>
    #include <windowsx.h>
    #include <initguid.h>
    #include "iostream.h"
    #include <afxres.h>
    #include <afxconv.h>

    //LPCSTR _lpa = NULL;
    int _convert = 0;

    CString cBuff2;
    char CHR[512];
    LPWSTR lpwstr; // Zielkonvertierung

    cBuff2 = "CStringString" ;

    strcpy(CHR , cBuff2.GetBuffer(0));

    lpwstr = A2W(CHR);

    // Aufruf so möglich
    hr=StgOpenStorage ( lpwstr , NULL, STGM_READ | STGM_DIRECT | STGM_PRIORITY, NULL, 0, &pIStorage );

    by!

    ps. könnte sich jemand angarieren den Junior Status bei mir zu ändern. Ich mein
    ich bin schon nen Jahrzehnt bei C und das stört mich etwas..



  • CString arbeitet mit TCHAR, welches sich automatisch anpasst, ob Du nun mit UNICODE oder MultiByte arbeitest.

    Falls also UNICODE definiert ist, kannst Du den String sofort an StgOpenStorage übergeben.

    Falls nicht, benutze folgende Konvertierung:

    USES_CONVERSION;
    CString str = "abc";
    StgOpenStorage( T2COLE( str), ...);
    

    [ Dieser Beitrag wurde am 23.01.2003 um 09:09 Uhr von RenéG editiert. ]



  • Man kann es auch kompleziert machen..

    Ok geht super , aber hat meine exe um 18 bytes größer gemacht*g

    thx für die bessere Variante

    rgs


Anmelden zum Antworten