Umieściłem w pliku exe moje dll za pomocą dll injection.
W dll jest zrobiona forma.
I kiedy uruchamiam mojego exe'ka najpierw uruchamia się forma z dll i dopiero po jej zamknieciu uruchamia się reszta programu.Ja chcę aby jednocześnie została uruchomiona forma z dll oraz forma z exe.Jak takie cos zrobić?
Jaki sens ma zrobienie biblioteki i wrzucenie jej do exe ?
Masz jedną aplikację, a zajmuję 2 razy więcej. Bezsensu.
Może się źle wyraziłem.W moich zamiarach jest , żeby biblioteka była osobno ale jedynie była ona wykorzystywana przez exe.Nie musi ona być władowana na siłę w exe.A w niektórych przypadkach się to może przydać,np jak się straciło kod źródłowy programu.Moje pytanie jest co trzeba napisać w bibliotece aby jej forma pracowała równolegle z formą główną programu.
Nie wiem czy dobrze kombinuję, ale jeżeli pokazanie jednej formatki po drugiej
formatce nie działa to zrób to może w wątku. A co do przechowywanie dllki - w
exeku programu to ma to czasem sens, jeżeli wszystko chcemy mieć w jednym
pliku, na przykład dołączając bass.dll i mamy - na przykład - zgrabną grę gdzie
wszystkie dane zostały umieszczone w zasobach, a co da się zrobić przy użyciu
modułu dllloader. A co do tego pokazywania formatek to może ktoś, coś więcej
tutaj Tobie doradzi, bo jeżeli chodzi o komunikację między oknami kiedy mamy
dwie aplikacje to do takich rzeczy oczywiście uzywa się komunikatów lub DDE.
nigdy nie robiłem wątków w dll.Tworzy się je tak samo jak w normalnym programie?
I w tym wątku ma się znaleŹć to?
form1 := TForm1.Create(nil);
Form1.ShowModal;
Nie wiem czy to będzie działało jak należy, a wątki masz opisane pod tym adresem:
Wątki - natomiast ja jedynie jak bawiłem
się na próbę w umieszczanie formatek w dllce, to zrobiłem to właśnie w taki sposób:
library dllka;
uses
Forms,
Classes,
unit1 in 'Unit1.pas' {Form1},
unit2 in 'unit2.pas' {Form2};
{$R dllka.res}
procedure SetAppHandle(AppHandle : integer); stdcall;
begin
Application.Handle := AppHandle;
end;
procedure ShowForm; stdcall;
var
Form1 : TForm1;
begin
Form1 := TForm1.Create(Application);
Form1.ShowModal;
Form1.Free;
end;
exports
SetAppHandle,
ShowForm;
begin
end.<delphi>
Poniżej wycinek z kodu głownej formatki programu w exe. Chociaż pewnie są też i inne sposoby, a i
nie mam tutaj na myśli ładowania dynamicznego, a nie statycznego, bo to jedno z oczywistych rozwiązan.
<delphi>//...
procedure SetAppHandle(AppHandle : integer); stdcall external 'dllka.dll';
procedure ShowForm; stdcall external 'dllka.dll';
{$R *.dfm}
procedure TForm1.Button1Click(Sender : TObject);
begin
SetAppHandle(Application.Handle);
ShowForm;
end;
//...