Functionsfehler Komponente [C++ Error] Unit1.cpp(21): E2034 Cannot convert 'char *' to 'wchar_t *'



  • Hi,

    möchte einer encoder Komponente zuweisen, dass sie eine WAV und eine MP3 Datei zum konvertieren hat.

    In der Beschreibung der Komponente steht folgfendes Beispiel:

    Private Sub Command1_Click()
    Dim err As Long
     err = Mp3Enc1.Open("d:\test.wav", "d:\test.mp3")
     ' "d:\test.wav" is the path of the wave file
     ' "d:\test.mp3" is the path of the wave file
     Mp3Enc1.Encode
    End Sub
    

    Das ist aber nicht für den C++ Builder.
    Würde gerne gerne wissen, wie das in C++ Builder heist.

    So sollte ich das machen, sagt der mir:

    mp3encoder->Open(wchar_t*InputFile, wchar_t*OutputFile
    

    Habe ich dann auch gemacht:

    mp3encoder->Open("c:\\test.wav", "c:\\test.mp3");
    

    Bekomme aber die folgenden Fehlermeldungen:

    [C++ Error] Unit1.cpp(21): E2034 Cannot convert 'char *' to 'wchar_t *'
    
    [C++ Error] Unit1.cpp(21): E2342 Type mismatch in parameter 'InputFile' (wanted 'wchar_t *', got 'char *')
    
    [C++ Error] Unit1.cpp(21): E2034 Cannot convert 'char *' to 'wchar_t *'
    
    [C++ Error] Unit1.cpp(21): E2342 Type mismatch in parameter 'OutputFile' (wanted 'wchar_t *', got 'char *')
    

    Habe leider keine Ahnung, was da falsch seine könnte !
    Das ganze in Klammern fassen, ging auch nicht !

    Wer kann mir helfen ???

    mfG,
    daple2003



  • Kann mir hier denn keiner helfen 😉
    Nee, im ernst muss das jetzt unbedingt wissen !

    mfG,

    daple2003



  • Schreibe einfach vor dem String ein L. Wenn Du aber eine Variable umwandeln willst dann kannst Du dafür StringToWideChar() verwenden.



  • ok, das habe ich jetzt nicht sooooo verstanden wie soll ich das
    mit dem StringToWideChar() genau machen ???

    daple2003



  • Ich zitiere hier einfach die BCB-Hilfe

    extern PACKAGE wchar_t * __fastcall StringToWideChar(const AnsiString Source, wchar_t * Dest, int DestSize);

    Beschreibung

    StringToWideChar wandelt den in Source übergebenen AnsiString von ANSI in Unicode um und speichert das Ergebnis in dem durch Dest und DestSize angegebenen Puffer. Der Puffer Dest enthält nach dem Aufruf höchstens DestSize - 1 Zeichen des Quell-Strings und das Wide-Zeichen NULL. StringToWideChar gibt einen Zeiger auf Dest zurück.

    Da Du aber oben im Quelltext Stringkonstanten verwendest, wäre es besser wenn Du ein L davorschreibst.

    mp3encoder->Open(L"c:\\test.wav", L"c:\\test.mp3");

    Du kannst auch das kleine l nehmen funktionierst genauso.



  • Statt StringToWideChar() könnte man auch WideString::c_bstr() nehmen.

    mp3encoder->Open(WideString("c:\\test.wav").c_bstr(), WideString("c:\\test.mp3").c_bstr();



  • bekomme leider nen CPU dbg breakpoint !!!
    kann das an der komponente leigen ist von www.dialog-medien.de ?

    daple2003



  • danke !!!

    mp3encoder->Open(WideString("c:\\test.wav").c_bstr(), WideString("c:\\test.mp3").c_bstr();
    

    damit gehts jetzt endlich !!!!!!
    aber mit L hats net geklappt !

    mfG,

    daple2003


Anmelden zum Antworten