Witajcie :)
Napisałem drobną bibliotekę dll, która ma za zadanie malować po canvasie komponentu Paintbox w głównej formie w pliku EXE.
W trakcie działania programu jest wszystko ok, ale po wyjściu dostaję dwa błędy Acces Violation.
Kod w DLL:
library Project1;
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses ShareMem, Windows, ExtCtrls, Graphics;
{$R *.res}
procedure Paint(Pb: TPaintbox); stdcall;
begin
Pb.Canvas.Pen.Color := ClGreen;
Pb.Canvas.Rectangle(Pb.ClientRect);
end;
exports
Paint name 'Paint';
begin
end.
wywołanie w exe: (ShareMem jest pierwszą biblioteką w kodzie projektu (Project - View source))
procedure Pnt(Pb:TPaintbox); stdcall external 'Project1.dll' name 'Paint';
(...)
Pnt(Paintbox1);
Próbowałem również przekazać obiekt przez referencję dopisując słówko var przed Pb:TPaintbox;.
Zauważyłem, że problem pojawia się wówczas, gdy próbuję edytować właściwości canvasu paintboxa np
Pb.Canvas.Pen.Color := ...;
Pb.Canvas.Font.Color := ...;
Wywołanie samej metody Rectangle nie powoduje błędów.
Próbowałem również bawić się wskaźnikami, pointerami czy nawet przekazywać całą formę do dll i korzystać z FindComponent, lecz albo w ogóle procedura nic nie rysowała, albo rzucało z nowu wyjątkami.
Wpadłem na pomysł również, by malować na bitmapie stworzonej w dll a potem do exe przekazywać tą bitmapę, ale chciałbym uniknąć tego rozwiązania.
Jak będzie potrzeba to dodam również kod "sztuczek" które próbowałem.
Proszę o pomoc i wskazówki.
Pozdrawiam.
with
dopiero coś kombinować z przekazanym parametrem?