Irgendwie bin ich zu blöd dazu
Zumindest wird nun die Section IMAGE in der
DLL gefunden, mein JPEG in die Section eingefügt, nur hab ich nun nach dem UpdateResource Aufruf z.b. 2 JPEGS darin mit dem Namen 5031 anstelle von einem!
Ein weiteres Problem kann später auch noch sein, das mein JPEG in der
Dll eine Language von Neutral hat, die alte aber ENGLISH ist.
Delphi-Quellcode:
var
ResLanguage: Word;
function EnumResLangProc(hModule: HMODULE; lpType, lpName: PChar; wIDLanguage: Word;
lParam: Longint): BOOL; stdcall;
begin
ResLanguage := wIDLanguage;
Result := False;
end;
procedure UpdateJPEGResource(const ModulePath, JPEGName, ResourceName: string);
var
hModule, hUpdate: THandle;
fs: TFileStream;
Data: Pointer;
begin
Data := nil;
hModule := LoadLibrary(PChar(ModulePath));
try
if hModule = 0 then
RaiseLastOSError;
EnumResourceLanguages(hModule, 'IMAGE', PChar(ResourceName), @EnumResLangProc, 0);
finally
FreeLibrary(hModule);
end;
hUpdate := BeginUpdateResource(PChar(ModulePath), false);
try
if hUpdate = 0 then
RaiseLastOSError;
fs := TFileStream.Create(JPEGName, fmOpenRead);
Data := AllocMem(fs.Size);
fs.Read(Data^, fs.Size);
if not UpdateResource(hUpdate, 'IMAGE', PChar(ResourceName), ResLanguage, Data, fs.Size) then
RaiseLastOSError;
if not EndUpdateResource(hUpdate, False) then
RaiseLastOSError;
finally
if Data <> nil then
FreeMem(Data);
FreeAndNil(fs);
end;
end;
Aufruf:
UpdateJPEGResource('C:\blub.dll', 'C:\5031.jpg', '5031');
Sieht dann so aus:
IMAGE
-----5031 (neues JPEG = LANG_NEUTRAL, SUBLANG_NEUTRAL)
-----5031 (altes JPEG = LANG_ENGLISH, SUBLANG_ENGLISH_US)
Statt:
IMAGE
----5031 (neues JPEG = LANG_ENGLISH, SUBLANG_ENGLISH_US)
Grüsse
s!