Code kopiert und nicht verstanden?
... das rot markiert müßtest du komplett weglassen können. Das diente im Ursprungscode ja nur dem Kopieren der Daten aus der Datei in einen allozierten Speicherbereich. Da du aber bereits ein
Handle hast, kannst du dir das sparen.
Code:
function LoadPictureFromRes(Instance: THandle; const szResName, szResType : String; var pPicture: IPicture) : Boolean;
const IID_IPicture : TGUID = '{7BF80980-BF32-101A-8BBB-00AA00300CAB}';
var
hResInfo,
hResGlobal : THandle;
dwResSize : DWord;
pResData : Pointer;
//
hMem : THandle;
pData : Pointer;
//
hRslt : HResult;
pStream : IStream;
Begin
Result := False;
hResInfo := FindResource(Instance, Pointer(szResName), Pointer(szResType));
if hResInfo = 0 then
Exit;
hResGlobal := LoadResource(Instance, hResInfo);
if hResGlobal = 0 then
Exit;
hMem := 0;
try
[color=red] pResData := LockResource(hResGlobal);
if Not Assigned(pResData) then
Exit;
dwResSize := SizeofResource(Instance, hResInfo);
if dwResSize = 0 then
Exit;
hMem := GlobalAlloc(GHND or GMEM_NODISCARD, dwResSize);
if hMem = 0 then
Exit;
pData := GlobalLock(hMem);
if Not Assigned(pData) then
Exit;
Move(pResData^, pData^, dwResSize);
GlobalUnlock(hMem);[/color]
pStream := nil;
hRslt := CreateStreamOnHGlobal(hMem, True, pStream);
if FAILED(hRslt) or (pStream = nil) then
Exit;
hRslt := OleLoadPicture(pStream, dwResSize, False, IID_IPicture, pPicture);
if (hRslt = S_OK) and (pPicture <> nil) then
Result := True;
finally
pStream := nil;
if hMem <> 0 then
GlobalFree(hMem);
if hResGlobal <> 0 then
FreeResource(hResGlobal);
end;
end;