Datei aus DLL extrahieren geht nicht?



  • Aloha,

    in einer meiner DLL's habe ich ein kleines Problem mit dem Extrahieren
    einer Ressource (PDF-Dokument) aus einem Menüpunkt.

    Das PDF wurde unter "PDF" als IDR_PDF1 eingebunden und wird auch in den
    Temp-Pfad des Systemes geschrieben. Jedoch mit einer Größe von 0Byte.

    Nehme ich den gleichen Code in einer Exe, so wird alles korrekt geschrieben
    und die Datei kann auch geöffnet werden...

    Hat jemand eine Idee warum es in einer MFC-Dll nicht geht?

    CString ls_path;
    GetTempPath(100,   ls_path.GetBuffer(MAX_PATH));   
    ls_path.ReleaseBuffer(); 
    
    HINSTANCE hApp = ::GetModuleHandle(0); 
    ASSERT(hApp); 
    
    HRSRC hResInfo; 
    hResInfo = ::FindResource(hApp,MAKEINTRESOURCE(IDR_PDF1),TEXT("PDF")); 
    HGLOBAL hRes = ::LoadResource(hApp, hResInfo);
    
    BYTE *PROG = (LPBYTE)::LockResource(hRes); 
    int PROG_SIZE = SizeofResource(hApp,hResInfo);
    
    CFile OutFile; 
    ls_path+="x.pdf";
    OutFile.Open(ls_path,OF_CREATE|OF_WRITE,NULL); 
    OutFile.Write(PROG,PROG_SIZE); 
    OutFile.Close();
    
    CString info="Die Anleitung wurde in den temporären Ordner unter\n";
    info+=ls_path;
    info+="\nentpackt und wird nun geöffnet.";
    MessageBox(info,"Hinweis:",MB_ICONINFORMATION);
    
    ShellExecute(NULL, "open", ls_path, NULL, NULL, SW_SHOW);
    

    Die Fehlermeldung lautet:

    Adobe Reader konnte "x.pdf" nicht öffnen, da der Dateityp nicht unterstützt
    wird, oder die Datei beschädigt ist....



  • das liegt an ::GetModuleHandle(0)

    lpModuleName

    If this parameter is NULL, GetModuleHandle returns a handle to the file used to create the calling process (.exe file).



  • Juhu, vielen Dank. Hätte man auch selbst über die MSDN sehen müssen...
    Mit dem Namen der DLL ("mydll.dll") geht es nun.

    Thx,
    Faki


  • Mod

    Warum machten alle immer mit GetModuleHandle herum? 😕

    Jede DLL bekommt Ihr eigenes Handle beim Aufruf über DllMain mitgeteilt!



  • Ich habe doch gar keine DllMain 😃


  • Mod

    Faki schrieb:

    Ich habe doch gar keine DllMain 😃

    Doch hast Du! Jede DLL die Code ausführt hat eine!

    Und wenn es die MFC ist gibt es immer noch AfxGetInstanceHandle!


Anmelden zum Antworten