Datein in Exe unterbringen



  • Hallo alle miteinander!
    Ich habe von mir n kleines Setup zu schreiben.
    Zum testen wollte ich mal ein Bild als Resource speichern und das Programm soll diese Datei dann expportieren.

    Ich wollte das Ganze mit ner Resource machen. nur irgendwie geht der Code nicht.

    resource.h

    #define MY_FILE 2000
    

    resource.rc

    #include<mfc\\afxres.h>
    #include"resource.h"
    
    MY_FILE BIN "Bildjpg"
    

    Prgm.cpp

    #include<windows.h>
    #include"resource.h"
    #include<stdio.h>
    
    #pragma warning (disable: 4996) //std lib nutzen ohne Warnungen
    
    int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,char *pcCmdLine,int icmdShow)
    {
    	HRSRC hResource = FindResourceA(hInst,NULL,MAKEINTRESOURCE(MY_FILE)); 
    	if(NULL==hResource)
    	{
    		MessageBox(NULL,"Fehler1",0,MB_OK);
    		return(0);
    	}
    	DWORD Size           = SizeofResource(hInst,hResource); 
    	HGLOBAL MemoryHandle = LoadResource  (hInst,hResource ); 
    	if(NULL==MemoryHandle)
    	{
    		MessageBox(NULL,"Fehler2",0,MB_OK);
    		return(0);
    	}
    
    	char *MemPtr = (char*)LockResource(MemoryHandle); 
    	if(NULL==MemPtr)
    	{
    		MessageBox(NULL,"Fehler3",0,MB_OK);
    		return(0);
    	}
    
    	FILE *File=fopen("Bild_.jpg","w");
    	if(NULL==File)
    	{
    		MessageBox(NULL,"Fehler4",0,MB_OK);
    		return(0);
    	}
    	fprintf(File,"%s",MemPtr);
    	fclose(File);	
    
    	UnlockResource(MemoryHandle);
    
    	MessageBox(NULL,"Ende","Ende!",MB_OK);
    	return(0);
    }
    

    Der meckert rum bei FindResource aber warum?



  • HRSRC FindResource(
    HMODULE hModule,
    LPCTSTR lpName,
    LPCTSTR lpType
    );

    ausserderm GetLastError() -> 💡



  • Ja gut. Aber was muss ich den da bei lpName hinschreiben?



  • MSDN



  • 😡 😡 😡
    Was denkst du eigentlich warum ich diese Frage überhaupt stelle?
    Würde ich sie stellen wenn ich in der MSDN gesucht und ne Lösung gefunden hätte?

    Ich hoffe ich bekomme jetzt keine Antwort von der_depp. (es sei denn es ist mal was konstruktives...)

    Also meine Frage: Was müsste ich in meinem Fall für lpName einsetzen?





  • Es wäre sehr nett wenn mir das mal einer mit Beispiel erklären kann, dabei sollte aus einer Resource wieder eine Datei gemacht werden.



  • FindResource, LoadResource, SizeOfResource, LockResource, WriteFile, CloseHandle, UnlockResource
    

    sollte ungefär so funzen



  • wenn ich mir deinen code gerad mal angucke, frage ich mich.

    fprintf(File,"%s",MemPtr);
    

    was soll das denn darstellen



  • Welche Fehlerinformation erhälst Du durch GetLastError()?

    Oder -falls Du möchtest- nimm einfach die Funktion ('ExtractReSrcFile') 😉 :

    #include <iostream>
    #include <windows.h>
    #include <conio.h>
    
    #include "resource.h"
    
    bool ExtractReSrcFile(const TCHAR*,WORD,const TCHAR*,HINSTANCE);
    
    int main()
    {
        ExtractReSrcFile(TEXT("IMAGE"), BMP_DEMO, TEXT("C:\\demo.bmp"));
    
        while(!kbhit());
        return (0);
    }
    
    bool ExtractReSrcFile(const TCHAR* pszType, WORD wReSrcID, const TCHAR* pszLocation, HINSTANCE hInst = GetModuleHandle(NULL))
    {
        if(pszType == NULL || pszLocation == NULL)
           return (false);
        HRSRC hSrcFile = FindResource(hInst, MAKEINTRESOURCE(wReSrcID), pszType);
        if(hSrcFile != NULL)
        {
            HGLOBAL hSrcFileLoad  = LoadResource(hInst, hSrcFile);
            void*   pvSrcFileData = LockResource(hSrcFileLoad);
            size_t  stSrcFileSize = SizeofResource(hInst, hSrcFile);
            HANDLE  hReSrcFile    = CreateFile(pszLocation, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
            if(hReSrcFile == INVALID_HANDLE_VALUE)
               return (false);
            WriteFile(hReSrcFile, pvSrcFileData, stSrcFileSize, NULL, NULL);
            CloseHandle(hReSrcFile);
    
            return (true);
        }
        return (false);
    }
    

Log in to reply