string zu wchar_t* in C



  • Hallo Community, ich hoffe ihr könnt mir helfen.
    Von anfang an will ich sagen, dass ich nicht viel Erfahrung im Programmieren habe und noch weniger explizit in C.
    Trotzdem habe ich mich auf der Arbeit dazu überreden lassen, ein Programm (was unbedingt in C geschrieben sein muss) zu schreiben, weil es sich simpel anhörte:

    Ich soll ein Programm für den Raspberry Pi schreiben, was alle 5min ein Foto macht, das mit einer Kamera von IDS, die auch ein Manual dazu liefern, auf dem 90% meines Codes basieren.
    Problem meines Codes ist, dass ich im Speicherpfad den Namen des Fotos festlege ( /root/Schreibtisch/CamSteuerung/Image.bmp. Da aber viele Fotos gemacht werden sollen, muss sich der Name der Datei ändern, aber das stellt sich für mich schwieriger raus, als ich dachte.
    Hier erstmal mein Code, der an dem angegeben Dateipfad das Foto speichert:

    //viele der Bibliotheken sind nicht gebraucht, sondern nur aus vielen Versuchen und Lösungen aus dem Internet

    #include <wchar.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stddef.h>
    #include <ueye.h>
    #include <string.h>
    #include <stdio.h>
    #include <string.h>
    #include <locale.h>
    #include <stdlib.h>
    #include <features.h>
    #include <stdarg.h>
    #include <bits/wchar.h>
    #include <xlocale.h>

    int main(int argc, char **argv){

    printf("Programm Start \n");

    HIDS hCam = 0; //Handle auf die Kamera
    INT nRet = is_InitCamera (&hCam, NULL);

    if(nRet == IS_SUCCESS){
    printf("Kamera erfolgreich initialisiert \n");
    }
    else{
    printf("Fehler beim Initialisieren der Kamera \n");
    }

    SENSORINFO Info; //gibt die option zur Abfrage von Daten der Kammera, hier Angabe der Maximalen Auflösung
    is_GetSensorInfo(hCam,&Info);
    INT width = Info.nMaxWidth;
    INT height = Info.nMaxHeight;
    INT bitspixel = 8;
    char* ppcImgMem = NULL;
    int pid = 0;
    nRet = is_SetErrorReport(hCam, IS_ENABLE_ERR_REP); //Gibt sofort eine spezifische Fehelermeldung aus

    if(nRet == IS_SUCCESS){
    printf("Fehlerreport aktiviert \n");
    }
    else{
    printf("Fehlerreport wurde nicht aktiviert \n");
    }

    nRet = is_SetDisplayMode(hCam, IS_SET_DM_DIB);
    if(nRet == IS_SUCCESS){
    printf("Displaymode auf Bitmap gesetzt \n");
    }
    else{
    printf("Fehler beim festlegen des Displaymodes \n");
    }

    printf("Bildhoehe: %d \n Bildbreite:%d \n", height,width);

    //Beginn der Schleife in der eigentlich x Fotos in 5min Abstand gemacht werden sollen
    for (int i = 0; i< 1; i++){

    nRet = is_AllocImageMem (hCam, width, height, bitspixel, &ppcImgMem, &pid);

    if(nRet == IS_SUCCESS){
    printf("Speicher erfolgreich alloziiert \n");
    }
    else{
    printf("Fehler beim Alloziieren des Speichers \n");
    }
    nRet = is_SetImageMem (hCam, ppcImgMem, pid);
    if(nRet == IS_SUCCESS){
    printf("Speicher erfolgreich aktiviert \n");
    }
    else{
    printf("Fehler beim aktivieren des Speichers \n");
    }
    nRet = is_FreezeVideo ( hCam, 1);
    if(nRet == IS_SUCCESS){
    printf("Bild aufgenommen \n");
    }
    else{
    printf("Fehler bei der Aufnahme des Bildes \n");
    }

    nRet = is_ParameterSet(hCam, IS_PARAMETERSET_CMD_SAVE_FILE, L"/root/Schreibtisch/CamSteuerung/test.ini",sizeof (L"/root/Schreibtisch/CamSteuerung/test.ini")); //gibt eine .ini Datei aus, in der viele Infos stehen, mit denen einige vielleicht etwas anfangen könnten

    IMAGE_FILE_PARAMS ImageFileParams;
    ImageFileParams.pwchFileName = L"/root/Schreibtisch/CamSteuerung/Imgage.bmp" ; // an dieser Stelle wird der Dateipfad für das bild festgelegt. Schön wäre es, wenn der Dateiname immer [...]/Image*i*.bmp wäre
    ImageFileParams.pnImageID = NULL;
    ImageFileParams.ppcImageMem = NULL;
    ImageFileParams.nQuality = 0;
    ImageFileParams.nFileType = IS_IMG_BMP;

    nRet = is_ImageFile(hCam, IS_IMAGE_FILE_CMD_SAVE, (void*) &ImageFileParams, sizeof(ImageFileParams) );
    nRet = is_FreeImageMem (hCam, ppcImgMem, pid);
    if(nRet == IS_SUCCESS){
    printf("Speicher wieder freigegeben \n");
    }
    else{
    printf("Fehler bei Freigabe des Speichers \n");
    }

    if(nRet == IS_SUCCESS){
    printf("Bild %d gespeichert \n", i+1);
    }
    else{
    printf("Speichern von Bild %d fehlgesdchlagen \n", i+1);
    }

    sleep(0.1); //Am Ende wird hier 5min gewartet
    }
    return 0;
    }

    //L"/root/Schreibtisch/CamSteuerung/testmitstring.bmp"

    Der Daten-Typ von ImageFileParas.pwchFileName ist wchar_t*. ich finde im Internet zwar eigentlich nur wchar_t aber abgesehen davon schaffe ich es nicht mal, den dateipfad auszugeben, zu einem String zu machen bzw. einen String in diesen datei-Typ umzuwandeln um im string den namen zu ändern. ich habe wpritf, swprintf, mb***** und alles mögliche ausprobiert. Dieses Forum ist meine letzte Hoffnung, Danke schon mal an alle die helfen wollen.



  • Hast du folgendes (in der Art) probiert?

    wchar_t dateiname[200];
    ...
    swprintf(dateiname, 200, L"/root/Schreibtisch/CamSteuerung/Imgage_%05d.bmp", i);
    ImageFileParams.pwchFileName = dateiname;
    

    Nach mehr habe ich in deinem Code nicht geschaut, da er nicht formatiert ist (fehlende Code-Tags). Und eine Minimales Programm für das Problem ist es auch nicht.



  • MaxGill schrieb:

    Von anfang an will ich sagen, dass ich nicht viel Erfahrung im Programmieren habe und noch weniger explizit in C.

    Das interessiert hier niemanden. Stell eine konkrete Frage zu deinem Problem und benutze Codetags, wenn du ganz viel Glück hast, wird dir aber auch so aus Mitleid geholfen...
    Also wenn ich "string to wchar_t" google, werden 365.000 Treffer angezeigt... Bist du zu faul um dir wenigstens mal einen davon anzusehen oder verstehst du die Erklärungen nicht?



  • grenzwert schrieb:

    Also wenn ich "string to wchar_t" google, werden 365.000 Treffer angezeigt...

    Sehr viele davon behandeln C++ und std::string und man muss wissen, wie wchar_t und wchar_t* zueinander stehen.


Log in to reply