Seite 1 von 1

Ressourcen Problem; C

Verfasst: 13.06.2008 19:11
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

Verfasst: 13.06.2008 21:06
von ZeHa
Änder mal Zeile 12 um in:

Code: Alles auswählen

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

Verfasst: 13.06.2008 22:08
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. ;)

Verfasst: 14.06.2008 01:16
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...

Verfasst: 14.06.2008 09:30
von ZeHa
Was sagt denn der Compiler diesmal?

Verfasst: 14.06.2008 09:39
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.

Verfasst: 15.06.2008 19:14
von Marie23
Danke :)