Einzelnen Beitrag anzeigen

dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Bilder von DLL in ImageList

  Alt 12. Aug 2007, 22:40
ok, hab mir das mal zu herzen genommen^^

jetzt sieht das ganze so aus:

Delphi-Quellcode:
procedure ImageToBitmap(Img: TImage);
var
  Pic: TPicture;
begin
  Pic := TPicture.Create;
  try
    Pic.Assign(Img.Picture);
    Img.Picture.Bitmap.Assign(Pic.Graphic);
  finally
    FreeAndNil(Pic);
  end;
end;

procedure TForm1.LoadImages;
var
  h :HINST;
  r :TResourceStream;
  j :TJpegImage;
  im: TImage;
  I: Integer;
  Namen: TStringList;
begin
  Namen := TStringList.Create;
  Namen.Add('bWdhTrackp'); Namen.Add('bWdhTrack');
  Namen.Add('bWdhp'); Namen.Add('bWdhNonep');
  Namen.Add('bWdhNone');

  h := LoadLibrary('pBilder.dll');
  if h <> 0 then
    for I := 0 to 4 do
    begin
      r := TResourceStream.Create(h, Namen[I], 'Jpeg');
      j := TJpegImage.Create;
      im := TImage.create(self);
        try
          j.LoadFromStream(r);
          Im.Picture.Assign(j);
          ImageToBitmap(Im);
          test.Add(im.Picture.Bitmap, im.Picture.Bitmap);
        finally
          j.Free;
          r.Free;
          im.free;
        end;
    end;
  FreeLibrary(h);
  Namen.free;
end;
leider kommt immernoch die AV.
Ich hab aber etwas interessantes festgestellt:
er führt nur die erste schleife aus, dann beimim.free springt er in die Unit System zu
Delphi-Quellcode:
        CALL SysInit.@GetTLS
        MOV ECX,[EAX].RaiseListPtr
        MOV EDX,[ECX].TRaiseFrame.NextRaise
        MOV [EAX].RaiseListPtr,EDX
        ADD ESP,5*4 { Remove local RaiseList        }
 [...]
nach so ca 100 befehlen kommt dann die AV.
Dominik
  Mit Zitat antworten Zitat