![]() |
DLL als *.res Datei
Guten Morgen.
Ich möchte gerne in mein Programm ein *.res Ressourcenscript einbauen, welche eine Dll sein soll. Diese soll vom Programm dann erstellt werden. Leider bekomme ich beim schreiben immer den Fehler 1784 ERROR_INVALID_USER_BUFFER. Keine Ahnung wo der Fehler liegen könnte. Mein Code: Ressourcenscript
Code:
Programmcode:
dllname RT_RCDATA "C:\MeineDll"
Delphi-Quellcode:
Weiß jemand woran der Fehler liegt? Mit Bildern klappt alles Perfekt..
function GetResourceData(rsName, rsType: PAnsiChar): Pointer;stdcall;
var fRes, lRes, lResSize: Cardinal; gResData: Pointer; begin fRes := FindResource(GetModuleHandle(nil), rsName, rsType); if fRes <> 0 then begin lRes := LoadResource(GetModuleHandle(nil), fRes); if lRes <> 0 then begin gResData := LockResource(lRes); result := gResData; end; end; end; function GetResourceSize(srsName, srsType: PAnsiChar): Cardinal;stdcall; var FindRes, sizeRes: Cardinal; begin FindRes := FindResource(GetModuleHandle(nil), srsName, srsType); if FindRes <> 0 then begin sizeRes := SizeOfResource(GetModuleHandle(nil), FindRes); if sizeRes <> 0 then begin result := sizeRes; end; end; end; procedure TForm1.FormCreate(Sender: TObject); var hcrtDll: Cardinal; dwBytesWritten: Cardinal; pDllRes: Pointer; begin pDllRes := GetResourceData('dllname', RT_RCDATA); hcrtDll := CreateFile('MeineDll.dll', GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, 0); if hcrtDLl <> INVALID_HANDLE_VALUE then begin WriteFile(hcrtDll, pDllRes^, GetResourceSize('dllname', RT_RCDATA), dwBytesWritten, 0); showmessage(inttostr(GetLastError)); Closehandle(hcrtDll); end; end; MfG |
Re: DLL als *.res Datei
Guten Morgen,
spontan fällt mir auf, dass deine Funktionen mitunter keinen definierten Rückgabewert liefern. Vielleicht besser so:
Delphi-Quellcode:
Wenn keine schwerwiegenden Gründe dagegen sprechen, dann würde ich die Funktionen ersetzen durch:
function GetResourceData(resName, resType: PAnsiChar): Pointer; stdcall;
var hRes, hMem: Cardinal; begin Result := nil; hRes := FindResource(0, resName, resType); if hRes <> 0 then begin hMem := LoadResource(0, hRes); if hMem <> 0 then Result := LockResource(hMem); end; end; function GetResourceSize(resName, resType: PAnsiChar): Cardinal; stdcall; var hModule: Cardinal; begin hModule := 0; Result := FindResource(hModule, resName, resType); if Result <> 0 then Result := SizeOfResource(hModule, Result); end;
Delphi-Quellcode:
Wenn du statt des Fehlercodes einen Klartext ausgeben möchtest, dann kannst du das so machen:
procedure SaveToFile(const fileName, resName: string; resType: PChar);
begin with TResourceStream.Create(0, resName, PChar(resType)) do try SaveToFile(fileName); finally Free; end; end;
Delphi-Quellcode:
Grüße vom marabu
ShowMessage(SysErrorMessage(GetLastError));
|
Re: DLL als *.res Datei
warum verwendest du nicht einfach TRessoruceStream? :gruebel:
[Edit]Den Teil von Marabu übersehen[/Edit] |
Re: DLL als *.res Datei
Leider klappt das es nicht, er meint die Resource würde nicht exisitieren.
Kann es sein, dass mit DLL-Dateien Probleme existieren und man bestimmte Dinge beachten muss, bei der Resource selbst? |
Re: DLL als *.res Datei
Hallo,
ich habe beide Ansätze aus Beitrag #2 ausprobiert und sie haben beide funktioniert. Wie hast du die erstellte RES-Datei in dein Projekt eingebunden? Freundliche Grüße |
Re: DLL als *.res Datei
Mit der Prozedur SaveToFile geht es, da frag ich mich wieso es mit meinen Funktionen nicht geht :(
naja danke trotzdem |
Re: DLL als *.res Datei
Sein Problem liegt an .Res
dllname RT_RCDATA "C:\MeineDll" // das ist nur ein Ordner So ist falsch! Du musst die Dateien auflisten oder Leute? So:dllname RT_RCDATA "C:\MeineDll" kannst du nie mit brcc32.exe .res erstellen <> |
Re: DLL als *.res Datei
Dann sollte aber brcc32 auch eine entsprechende Fehlermeldung bringen:
Zitat:
|
Re: DLL als *.res Datei
hm das thema ist schon längst geklärt.
benutze sowieso nur noch TResourceStream |
Re: DLL als *.res Datei
und wo lag der Fehler?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz