[Delphi] Biblioteki dll wywoływane między sobą

0

Witam. Mój program składa się z 3 form, przy czym jedna umieszczona jest w pliku exe a dwie w bibliotekach dll.
Exe-c wywołuje jedną bibliotekę poprzez kod d, natomiast biblioteka wywołana przez exe-ca wywołuje drugą bibliotekę poprzez kod e. Moje pytanie brzmi. Czy takie wywoływanie bibliotek między sobą (kod e), nie obciąża zbytnio systemu w momencie, kiedy formularzy byłoby więcej w bibliotekach. I jak przerwać działanie biblioteki wywołanej przez drugą bibliotekę. Chodzi mi konkretnie o mój przykład.

{Tworzę bibliotekę z formularzem (kod a)}

library MojaDLL;
uses SysUtils, Classes,
Moja in 'Moja.pas' {F_Moja};
{$R *.res}
exports
cos_tam;
end.
{Analogicznie tworzona jest druga biblioteka MojaDLL_001}

{Kod źródłowy formularza i funkcji go obsługującej (kod b)}
unit Moja;
interface
uses Windows;
private
{ Private declarations }
public
{ Public declarations }
end;
function cos_tam (AHandle:THandle):TModalResult; StdCall;
implementation
{$R *.dfm}
function cos_tam (AHandle:THandle):TModalResult;
var F_Moja:TF_Moja;
begin
Application.Handle:=AHandle;
F_Moja:=TF_Moja.Create(Application);
try
result:=F_Moja.ShowModal;
finally
F_Moja.Free;
end;
end;
end.
{Analogicznie tworzony drugi formularz Moja_001 biblioteki}

{Moduł importowy biblioteki MojaDLL (kod c)}
unit MojaDLLImport;
interface
uses Forms;
function cos_tam(AHandle:THandle):TModalResult;
function cos_tam_001(AHandle:THandle):TModalResult;
StdCall;
implementation
function cos_tam; external 'MojaDLL.dll' name 'cos_tam';
function cos_tam_001; external 'MojaDLL_001.dll' name 'cos_tam_001';
end.

{Teraz postać jak tę bibliotekę wykorzystuje plik exe (kod d)}
implementation
uses MojaDLLImport;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
cos_tam(Application.Handle);
end;

{Natomiast biblioteka uruchomiona poprzez exe-ca wywołuje drugą bibliotekę procedurą (kod e)}.
Function cos_tam_001(AHandle:THandle):TModalResult;StdCall;
implementation
{$R *.dfm}
Function cos_tam_001; external 'MojaDLL_001.dll' name 'cos_tam_001';
(...)
procedure TF_Moje_001.Button1Click(Sender: TObject);
begin
cos_tam_001 (Application.Handle);
end;

Z góry dziękuję.
:-|

0

Witam.
Mam pytanie, zrobiłem dll z formą, oraz program który ?wywołuje? ta formę z dll-a, chciałem na tej formie z dll-a uzyskać efekt przenikania, a w zasadzie pojawienia się jej jako loga powitalnego, do tego chciałem zastosować właściwość głównej formy AlphaBlend.
Sterując jej wartością od 0 do 255 uzyskujemy pojawienie się formy, do tego zastosowałem timer w którym inkrementuje licznik i przypisuje go do AlphaBlendValue.
Nie wiem dlaczego wywala mi błąd :/
Zamieszczam kod pod linkiem <url>www.beat01.republika.pl\logo_w_dll.rar</url>
Pomocy co jest w tym nie tak ?

0

Witaj
Dzięki za odświeżenie wątku.
Miałem te te same problemy co Ty. Próbowałem logo umieścić w dll i dodać AlphaBlend. Próbowałem wpisywać do listy uses głównej formy te same polecanie co w dll. I nic. To nie tylko problem z AlphaBlend. Na początku miałem też problemy z komponentem WebBroser i inne rzeczy - pokazywały mi się błędy. Próbowałem zaczerpnąć rad na forum, ale nikt mi nie odpowiedział dlaczego tak się dzieje. Pewnie forma w exe ma inne parametry [brak między dll-ką komunikacji w przekazywaniu wszystkich parametrów]. Dołączam się do Twojego pytania dlaczego AlphaBlend wywala błąd.

Pozdrawiam ;)

0

Witam Cię Bruno(M) i forumowiczów.
Wiesz mnie się zdaję że problem nie tkwi w AlphaBlend tylkow timirze :|
Jeśli masz chwile to zobacz kodzik co zamieściłem pod linkiem, w formie która jest umieszczona w dll-u jest timer który co 200ms zwieksza wartość AlphaBlend począwszy od 0 do 255, czyli od niewidocznej formy do max widocznej, problem w tym, ze jak na stałe ustawie wartość Form1.AlphaBlendValue:=100; skompiluje to wywołanie tej formy nie skutkuje błędem, natomiast gdy zmiana wartości następuje przez timer to z miejsca błąd ;(
Będe kombinował, jak dojdziesz do jakiś wniosków to bardzo chetnie je poczytam :)
Pozdrawiam hej

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