Result:TBitmap

0

Jak stworzyć funkcję zwracającą TBitmap ładowaną z dll? Próbowałem już czegoś takiego:

function funkcja:tbitmap;

oraz:

procedure procedura(var bitmapa:tbitmap);

Za każdym razem wyskakuje access violation. Od razu mówię, że dałem bitmap.create; i tego typu rzeczy.---------------------------
Delphi 6

Pozdrówka

0

Obiekt TBitmap jest bardzo duży. Lepiej, żebyś przekazywał jedynie wskaźnik do tego obiektu.

function ZwrocBitmape : TPointer;
var
Bitmapa : TBitmap;
begin
Bitmapa := TBitmap.Create;
.
.
Result := @Bitmapa;
end;

a potem, żeby odczytać to tylko:

var
Bitmapa : TBitmap;
begin
Bitmapa := ZwrocBitmape; * lub Bitmapa.Assign(ZwrocBitmape); Ale co do tego drugiego to nie jestem pewien. Jeżeli masz już utworzony obiekt TBitmap to powinno zadziałać.--Jest jeszcze jeden błąd ... :)

Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.

Prośba o pomoc do Delphi po polsku. Oceniajcie i dodawajcie komentarze
http:*codecentral.borland.com/codecentral/ccweb.exe/listing?id=18659

Oficjalny kanał IRC serwisu 4programers:
serwer: warszawa.ircnet.pl sieć: POLNet kanał: #4programmers.net

0

Nie wiem czemu, ale delphi nie chce mi rozpoznać typu TPointer. A jak zmienię na Pointer to znowu wywala błąd: incompatibles types tbitmap and procedure :(.---------------------------
Delphi 6

Pozdrówka

0

Sorry, mój błąd. Pisałem z pamięci i nie sprawdzałem tego. Powinno być tak:

type PoBitmap = TBitmap;

function ZwrocBitmape : PoBitmap;
var
Bitmapa : TBitmap;
begin
Bitmapa := TBitmap.Create;
.
.
Result := @Bitmapa;
end;

a potem, żeby odczytać to tylko:

type PoBitmap = </sup>TBitmap;

var
Bitmapa : TBitmap;
begin
Bitmapa := ZwrocBitmape^;
--Jest jeszcze jeden błąd ... :)

Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.

Prośba o pomoc do Delphi po polsku. Oceniajcie i dodawajcie komentarze
http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=18659

Oficjalny kanał IRC serwisu 4programers:
serwer: warszawa.ircnet.pl sieć: POLNet kanał: #4programmers.net

0

No i dalej coś mu nie pasuje, bo wywala access violation :(. Oto kod:

type PoBitmap = TBitmap;

procedure TForm1.Button2Click(Sender: TObject);
var
DLL : THandle; * uchwyt biblioteki
getvis : function:PoBitmap;
Bitmapa : TBitmap;
begin
bitmapa:=tbitmap.Create;
DLL := LoadLibrary(Pchar('visualization.dll')); * laduj biblioteke
try
@getvis := GetProcAddress(DLL, 'getvis'); * laduj procedure
if @getvis = nil then raise Exception.Create('Bład - nie mogę znaleźć proceudry w bibliotece!');

 Bitmapa := getvis</sup>;

finally
FreeLibrary(DLL); * wreszcie zwolnij pamiec
end;

canvas.Draw(0, 0, bitmapa);

end;

I biblioteka:

library visualization;

uses
SysUtils, Classes, graphics;

{$R *.res}

type PoBitmap = ^TBitmap;

function getvis : PoBitmap;
var
Bitmapa : TBitmap;
begin
Bitmapa := TBitmap.Create;
bitmapa.Width:=200;
bitmapa.Height:=100;
bitmapa.Canvas.Rectangle(0, 0, 200, 100);
Result := @Bitmapa;
end;

exports
getvis name 'getvis';

begin
end.

Delphi 6

Pozdrówka

0

thenkles napisał:
&gttype PoBitmap = TBitmap;
&gt
&gtprocedure TForm1.Button2Click(Sender: TObject);
&gtvar
&gt DLL : THandle; * uchwyt biblioteki
&gt getvis : function:PoBitmap;
&gt Bitmapa : TBitmap;
&gtbegin
&gtbitmapa:=tbitmap.Create;
&gt DLL := LoadLibrary(Pchar('visualization.dll')); * laduj biblioteke
&gt try
&gt @getvis := GetProcAddress(DLL, 'getvis'); * laduj procedure
&gt if @getvis = nil then raise Exception.Create('Bład - nie mogę znaleźć proceudry w bibliotece!');
&gt
&gt Bitmapa := getvis
;
&gtcanvas.Draw(0, 0, bitmapa);* To powinno być tu
&gt finally
&gt FreeLibrary(DLL); * wreszcie zwolnij pamiec
&gt end;
&gt
&gt
&gtend;
&gt
&gt
Jeżeli zwalniasz bibliotekę, to usuwana jest także pamięć zarezerwowana przez nią, czyli nasza bitmapa. Zwalniaj bibliotekę na koniec.--Jest jeszcze jeden błąd ... :)

Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.

Prośba o pomoc do Delphi po polsku. Oceniajcie i dodawajcie komentarze
http:*codecentral.borland.com/codecentral/ccweb.exe/listing?id=18659

Oficjalny kanał IRC serwisu 4programers:
serwer: warszawa.ircnet.pl sieć: POLNet kanał: #4programmers.net

1 użytkowników online, w tym zalogowanych: 0, gości: 1