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
-
Warum machten alle immer mit GetModuleHandle herum?

Jede DLL bekommt Ihr eigenes Handle beim Aufruf über DllMain mitgeteilt!
-
Ich habe doch gar keine DllMain

-
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!