Absolutes Anfängerproblem



  • Hallo,

    Ich bin gerade von Delphi auf C++ umgestiegen und habe mit einigen Dingen noch so meine Probleme zum Beispiel hiermit:

    char windir_name[MAX_PATH];
            GetWindowsDirectory( windir_name, sizeof( windir_name ) );
            if (!(ExtractFilePath(Application->ExeName) == windir_name))
            {
                    Char Exenom[MAX_PATH] = "MeinProgramm.exe";
                    CopyFile ((ExtractFilePath(Application->ExeName) + ExtractFileName(Application->ExeName)), (PChar(windir_name) + PChar(Exenom)), TRUE);
            }
    

    Damit möchte ich überprüfen ob sich mein Programm im Windows-Verzeichnis befindet, wenn nicht kopiert es sich dort hin. Das Problem ist das beim CopyFile Befehl die Typenumwandlung nicht klappt, der Dateiname der Zieldatei ist eine Char-Variable und die wird nicht akzeptiert. Kann mir jemand sagen wie ich das konvertieren kann?

    Danke & Liebe Grüße,

    Seddto



  • Ich habe im Moment die Hilfe nicht verfügbar, so dass ich nicht genau weiß, was die Funktion CopyFile als Argumente
    erwartet. Aber wenn das zweite Argument Ärger bereitet, könnte es vielleicht so funktionieren:

    CopyFile (Application->ExeName, String((PChar(windir_name) + PChar(Exenom))), TRUE);
    

    Falls CopyFile() char* als Arguemente erwartet, dann versuch's mal mit c_str().
    Für was ist eigentlich PChar() gut? Und weshalb ziehst Du den Pfad- und Dateinamen aus Application->ExeName raus
    und setzt sie dann gleich wieder zusammen? Letzteres habe ich mal rausgeschmissen - sollte auch so funktionieren.

    Gruß,

    Alexander



  • Danke für die Antwort. Ich glaube inzwischen es liegt an dem Plus zwischen windir_name und exenom. Ich kriege vom C++ Builder die Fehlermeldung "Invalid Pointer addition". Aber die beiden Variablen sind doch garnicht als Pointer initalisiert oder sehe ich das falsch?



  • doch, sind sie. Du hast zwei Zeiger auf zwei Array of chars. Wenn du diese
    zusammen zählen würdest, hättest du einen Zeiger irgendwo anders im Speicher.
    caste beider vorher nach AnsiString, dann sollte es gehen:

    AnsiString strTemp = (AnisString)windir_name + (AnisString)Exenom;

    mit strTemp.c_str() bekommst du wieder ein array of char und hast somit beide
    Felder "addiert".


Anmelden zum Antworten