Ressourcen Problem; C

Fragen zu allen anderen Programmiersprachen.
Marie23
Beiträge: 49
Registriert: 31.05.2008 18:14

Ressourcen Problem; C

Beitrag von Marie23 »

Hallo, ich hab mal eine Frage:

Ich will ein Foto in einer Ressource Datei mitcompilen und dann später auf der Festplatte speichern. Jetzt bekomm ich bei meinem Code folgenden Error:

Code: Alles auswählen

 ERROR
In function `int main()':
[12] invalid conversion from `void*' to `const char*'  
[12] initializing argument 2 of `int fprintf(FILE*, const char*, ...)' 
Wie kann ich das beheben? Hier mein Code:

Code: Alles auswählen

#define STRICT
#include <windows.h>
#include <stdio.h>
#include "res.h"

int main () {
   LPVOID data1 = LockResource(LoadResource(0, FindResource(0,MAKEINTRESOURCE(ID_MOD_01),"BINARY")));

  FILE *datei = fopen ("foto.jpg", "b");
  if (datei != NULL)
    {
      fprintf (datei, data1);
      fclose (datei);
    }
         return 0;
 }
Gruss Marie
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Änder mal Zeile 12 um in:

Code: Alles auswählen

fprintf(datei, "", data1);
das müßte funktionieren.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Nimm fwrite(data1, size, 1, datei);
'size' bekommst Du wohl mit SizeofResource() oder Dir ist die Größe bekannt.
Bei fopen() sollte der Modus "wb" sein.
'data1' solltest Du vorm benutzen noch prüfen.


In PB schreibst Du doch auch keine Binärdaten mit WriteString. ;)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Marie23
Beiträge: 49
Registriert: 31.05.2008 18:14

Beitrag von Marie23 »

Code: Alles auswählen

#define STRICT
#include <windows.h>
#include <stdio.h>
#include "res.h"

int main () {
   LPVOID data1 = LockResource(LoadResource(0, FindResource(0,MAKEINTRESOURCE(ID_FILE_01),"BINARY")));

  FILE *datei = fopen ("foto.jpg", "wb");
  if (datei != NULL)
    {
      fwrite(data1, 1, SizeofResource(data1), datei); 
      fclose (datei);
    }
         return 0;
 } 
Klappt leider immer noch nicht...
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Was sagt denn der Compiler diesmal?
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Marie23 hat geschrieben:Klappt leider immer noch nicht...
Du hast Argument 2 und 3 von fwrite vertauscht.
Du hast SizeofResource() falsch angewendet, schau Dir mal die Hilfe zu
dieser WinAPI-Funktion an.

Code: Alles auswählen

#define STRICT
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include "res.h"

int main(int argc, char* argv[]) {
    LPVOID  data1;
    FILE   *file;
    DWORD   size;
    HRSRC   resource;

    if( resource = FindResource(0, MAKEINTRESOURCE(ID_MOD_01),"BINARY") ) {
        if( size = SizeofResource(0,resource) ) {
            if( data1 = LockResource( LoadResource(0, resource)) ) {
                if( file = fopen("foto.jpg","wb") ) {
                    if( fwrite(data1,size,1,file) ) {
                        printf("Datei geschrieben.\n");
                    } else {
                        printf("Konnte datei nicht schreiben!\n");
                    }
                    fclose(file);
                } else {
                    printf("Konnte datei nicht oeffnen!\n");
                }
            } else {
                printf("LockResource = 0!\n");
            }
        } else {
            printf("SizeofResource ist 0!\n");
        }
    } else {
        printf("Kann Resource nicht finden!\n");
    }
    
  return 0;
}
oder

Code: Alles auswählen

#define STRICT
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include "res.h"


int main(int argc, char* argv[]) {
    LPVOID  data1;
    FILE   *file;
    DWORD   size;
    HRSRC   resource;

    if( !( resource = FindResource(0, MAKEINTRESOURCE(ID_MOD_01),"BINARY") ) ) {
        printf("Kann Resource nicht finden!\n");
        return 1;
    }

    if( !( size = SizeofResource(0,resource) ) ) {
        printf("SizeofResource ist 0!\n");
        return 1;
    }


    if( !( data1 = LockResource( LoadResource(0, resource)) ) ) {
        printf("LockResource ergibt 0!\n");
        return 1;
    }

    if( !( file = fopen("foto.jpg","wb") ) ) {
        printf("Konnte datei nicht oeffnen!\n");
        return 1;
    }


    if( fwrite(data1,size,1,file) ) {
        printf("Datei geschrieben.\n");
    }
    else {
        printf("Konnte datei nicht schreiben!\n");
    }
    fclose(file);
    
    return 0;
}
getestet.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Marie23
Beiträge: 49
Registriert: 31.05.2008 18:14

Beitrag von Marie23 »

Danke :)
Antworten