Funktion mit const wchar_t als parameter



  • Hallo,

    Ich habe ein Funktion die so aussieht:

    fkt(const wchar_t *in, const wchar_t **out);
    
    const WCHAR request[] = L"Hallo";
    const WCHAR Response[] = L"";
    pMyObject->Fkt(request,&Response);
    

    error C2664: 'MyObject::Fkt': Konvertierung des Parameters 1 von 'const WCHAR (*)[6]' in 'const WCHAR *' nicht möglich

    error C2664: 'wprintf': Konvertierung des Parameters 1 von 'const WCHAR (*)[1]' in 'const wchar_t *' nicht möglich

    Kann mir jemand sagen wie ich das hinbekomme? Ich kann die Funktion leider nicht ändern.

    Gruß!



  • Ich nehme an, der Parameter const wchar_t** out soll ein Array von Wide-Strings repräsentieren, in das die Funktion Werte speichert. Gibt die Dokumentation irgendwelche Vorgaben bezüglich Grösse und Speicherverwaltung?



  • Nein, da habe ich keine Vorgaben. Die Funktion ist auch nur als Prototyp bekannt. Die konkrete Implementierung macht jemand anderes. Ich muss mich jedoch an diesen Prototyp halten.


  • Administrator

    Sebi84 schrieb:

    Nein, da habe ich keine Vorgaben. Die Funktion ist auch nur als Prototyp bekannt. Die konkrete Implementierung macht jemand anderes. Ich muss mich jedoch an diesen Prototyp halten.

    Aber du musst dich doch an irgendeine Schnittstellenspezifikation halten. Irgendwo muss beschrieben sein, was du übergeben muss und was du wie zurückbekommst. Ich kenne die Lösung um die Fehlermeldung zu umgehen, aber ich scheue mich sie dir zu sagen, da es stark danach aussiehst, dass danach, durch das falsche verwenden der Schnittstelle, undefiniertes Verhalten auftreten wird und du am Ende mit irgendwelche Speicherfehlern dastehst 😉

    Grüssli



  • Sebi84 schrieb:

    Nein, da habe ich keine Vorgaben. Die Funktion ist auch nur als Prototyp bekannt. Die konkrete Implementierung macht jemand anderes. Ich muss mich jedoch an diesen Prototyp halten.

    Du wirst doch wohl wissen, was du als zweites Argument an die Funktion übergeben sollst? Wie sollst du sonst damit arbeiten?



  • Naja halt einen wchar_t in den man einen Text schreiben kann der auch so lang ist wie der den ich übergeben habe. Mir würde es für Testzwecke reichen wenn ich einen text übergeben kann und der dann wieder zurückkommt.



  • Sebi84 schrieb:

    Naja halt einen wchar_t in den man einen Text schreiben kann der auch so lang ist wie der den ich übergeben habe. Mir würde es für Testzwecke reichen wenn ich einen text übergeben kann und der dann wieder zurückkommt.

    Dir ist aber schon klar, dass die beiden Parameter verschiedene Typen haben? Wie willst du also den gleichen "Text" (ich nehme an, du meinst Array von Strings) zurückerhalten und 2. wie ist es zu verstehen, dass dieser die gleiche Länge haben soll? Wie weiss man, ob zwei verschiedene Typen die gleiche Länge haben?

    Im Ernst: Hast du keine vernünftige Information über die Schnittstelle bekommen? Es ist einfach sehr schwierig, dir zu helfen, wenn man nicht einmal weiss, was die Funktion tut.



  • Eigentlich soll sie nur den Text zurückgeben der ihr übergeben wurde. Mehr nicht. Klingt sinnlos, ist aber für ein Beispiel nützlich.



  • Hast du meinen letzten Beitrag überhaupt gelesen?



  • Ich nehme mal an das ganze soll auf sowas rauslaufen:

    #include <cstring>
    #include <iostream>
    using namespace std;
    
    void pass( const char* data, char** ret )
    {
        *ret = new char[strlen(data)+1];
        strcpy(*ret, data);
    }
    
    int main() {
        char* ret;
        pass("Hello world", &ret);
        cout << "*" << ret << "*" << endl;
        delete[] ret;
    }
    

    Kann es sein, dass das "const" bei deinem "const wchar_t** out" nicht hingehört?



  • Ja ich bin mir sicher das der zweite Parameter auch ein const ist. Wundert mich auch, aber gibt es trotzdem eine Möglichkeit ihn zu verwenden?



  • Es ist genau das, was Dravere sagte. Da du uns offenbar keine genaueren Angaben über dein Problem mitteilen willst, müssen wir wild im Zeug rumraten. L'abra d'or's Annahme ist eine von vielen möglichen.

    Wir wissen nicht, wer den Speicher anfordert, wer ihn freigibt, worauf der Doppelzeiger zeigt oder wie Input- und Outputparameter zusammenhängen. Wir wissen absolut rein gar nichts. Und du verlangst allen Ernstes von uns, dass wir unter diesen Voraussetzungen dein Problem lösen? 🙄

    Compilerfehler zu beseitigen ist nicht das Problem. Aber wir wollen schliesslich, dass das Programm korrekt läuft, oder? Also bitte mach dir die Mühe und teile uns die zentralen Informationen über die Schnittstelle deiner Funktion mit.



  • SAg deinem Partner er soll gefälligst std::string nutzen.



  • Icematix schrieb:

    SAg deinem Partner er soll gefälligst std::string nutzen.

    Wenn dann std::wstring.
    Aber auch wenn wir hier in C++ sind, heißt es noch lange nicht, dass man keinen const (w)char* übergeben soll.
    Dazu kann man erst was sagen wenn man genauere Infos hat was die Funktion genau tut/tun soll, ob es Seiteneffekte hat usw.


Log in to reply