Arsip: [Ask] Free DLL Handle
more 12 years ago
henry_sys
Para suhu Delphi sekalian saya mau tanya dan mohon pencerahan...
saya buat 1 aplikasi dengan DLL (Dynamic Link Library) kemudian saya buat 1 aplikasi lg utk panggil DLL yg tadi.
Pada proses pemanggilan dan handle Form program berjalan dengan baik, tetapi ketika saya ingin terminate/Close program pemanggil ada pesan error Memory (Acces violation......) walaupun DLL nya udah saya Free sebelum Terminate,
ini Coding Pemanggil DLL saya
type
.......
.......
private
MyReport : THandle;
CallReport : procedure (vParentApplication: TApplication; vControl:TWinControl); stdcall;
.....
.....
procedure TFmMain.FormCreate(Sender: TObject);
begin
if MyReport = 0 then
MyReport := LoadLibrary('Reports.Dll');
end;
procedure TFmMain.Reports1Click(Sender: TObject);
begin
if MyReport <> 0 then
begin
@CallReport := GetProcAddress(MyReport,'ShowMain');
CallReport(Application, cxTabsheet1);
end;
end;
procedure TFmMain.Exit1Click(Sender: TObject);
begin
if MyReport <> 0 then
FreeLibrary(MyReport);
Close;
end;
Sorce DLL nya
procedure ShowMain(vParentApplication :TApplication; vComControl:TWinControl); stdcall;
begin
Application.CreateForm(TDmReports,DmReports); {Create dataModule utk Keneksi DB}
Application:= vParentApplication;
vControl := vComControl;
FmMainReport := TFmMainReport.CreateParented(vComControl.Handle);
FmMainReport.QuMenu.Open;
FmMainReport.Show;
end;
exports ShowMain;
klu saya Trace error itu terjadi ketika FreeLibrary.....
mohon bantuan para master2 sekalian
more 12 years ago
henry_sys
[Double Thread, and Has Be Merged, by mas_kofa]
Para suhu Delphi sekalian saya mau tanya dan mohon pencerahan...
saya buat 1 aplikasi dengan DLL (Dynamic Link Library) kemudian saya buat 1 aplikasi lg utk panggil DLL yg tadi.
Pada proses pemanggilan dan handle Form program berjalan dengan baik, tetapi ketika saya ingin terminate/Close program pemanggil ada pesan error Memory (Acces violation......) walaupun DLL nya udah saya Free sebelum Terminate,
ini Coding Pemanggil DLL saya
type
.......
.......
private
MyReport : THandle;
CallReport : procedure (vParentApplication: TApplication; vControl:TWinControl); stdcall;
.....
.....
procedure TFmMain.FormCreate(Sender: TObject);
begin
if MyReport = 0 then
MyReport := LoadLibrary('Reports.Dll');
end;
procedure TFmMain.Reports1Click(Sender: TObject);
begin
if MyReport <> 0 then
begin
@CallReport := GetProcAddress(MyReport,'ShowMain');
CallReport(Application, cxTabsheet1);
end;
end;
procedure TFmMain.Exit1Click(Sender: TObject);
begin
if MyReport <> 0 then
FreeLibrary(MyReport);
Close;
end;
Sorce DLL nya
procedure ShowMain(vParentApplication :TApplication; vComControl:TWinControl); stdcall;
begin
Application.CreateForm(TDmReports,DmReports); {Create dataModule utk Keneksi DB}
Application:= vParentApplication;
vControl := vComControl;
FmMainReport := TFmMainReport.CreateParented(vComControl.Handle);
FmMainReport.QuMenu.Open;
FmMainReport.Show;
end;
exports ShowMain;
klu saya Trace error itu terjadi ketika FreeLibrary.....
mohon bantuan para master2 sekalian
more 12 years ago
mat_koder
Cuman ngeliat sepintas saja :
Application.CreateForm(TDmReports,DmReports); {Create dataModule utk Keneksi DB}
Application:= vParentApplication;
apa memang benar-benar logix code anda seharusnya demikian?
(hanya bertanya saja - it would not generate error on compiling -)
more 12 years ago
henry_sys
@mat_koder: Cuman ngeliat sepintas saja :CreateForm itu construktor yg berguna untuk mengcreate class TDmReport dan menampungnya kedalam object dengan nama DmReport itu yg saya tahu kalau salah mohon diperbaiki, Tetapi program itu tidak error dan Running Normal klu agan pingin lihat(bkn mksd menggurui) coba buka *.dpr project delphi biasanya secara default akan menulisapa memang benar-benar logix code anda seharusnya demikian? (hanya bertanya saja - it would not generate error on compiling -)Application.CreateForm(TDmReports,DmReports); {Create dataModule utk Keneksi DB} Application:= vParentApplication;
uses
.......
.......
begin
Application.initialized;
Application.CreateForm(NamaKelas,NamaObject);
.....
.....
Application.Run;
end.
untuk kasus saya semua TForm/TComponent sudah saya inisialisasi jadi tinggal di "Create" aja
dan "Action := Cafree" untuk free Object ketika di close
Yang jadi masalah saya adalah bagaimana membuat procedure untuk memfree seleruh object yg telah saya create, baru kemudian melepas Handle tanpa klik close pada tiap Form Mohon pencerahan para master delphi sekalian.....
It'is Urgent :?
more 12 years ago
reminder2k1
Yang perlu di perhatikan ketika bermain DLL adalah, USE SHAREMEM di file .dpr yang akan mengexecute .dll tersebut...
Apakah sudah spt itu???
more 12 years ago
mat_koder
Application.CreateForm(TDmReports,DmReports); {Create dataModule utk Keneksi DB}
Application:= vParentApplication;
bukankah baris2 hrs lebih dahulu dari baris 1 ( dari segi logic-nya ) ?
coba buat begini:
var
OldDLLAppHandle : THandle;
procedure ShowMain(vParentApplication :TApplication; vComControl:TWinControl); stdcall;
begin
Application.Handle := vParentApplication.Handle;
Application.CreateForm(TDmReports,DmReports); {Create dataModule utk Keneksi DB}
vControl := vComControl;
FmMainReport := TFmMainReport.CreateParented(vComControl.Handle);
FmMainReport.QuMenu.Open;
FmMainReport.Show;
end;
exports ShowMain;
initialization
OldDLLAppHandle := Application.handle;
finalization
Application.handle := OldDLLAppHandle;
jangan lupa waktu di main-app , deklarasi ShowMain harus benar ( stdcall calling ).
more 12 years ago
henry_sys
Untuk sementara saya temukan solusi untuk memfree semua Object pada Finalization
Initialization
RegisterClass(ClassOfForm);
Finalization
if Assigned(ObjectOfForm) then
ObjectOfForm.Free;
UnRegisterClass(ClassOfForm);
Pada AppMain
procedure TFmMain.CloseMainApp;
begin
UnRegisterModuleClasses(NamaHandle);{Procedure untuk mengeksekusi finalization pada ObjectOfForm}
FreeLibrary(NamaHandle);
Close;//Application.Terminate;
end;
Mohon masukan dari master-master sekalian ttg cara yg saya gunakan.....more ...
- Pages:
- 1
reply |
Report Obsolete
Last Articles
Last Topic
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #5: UX: Research, Design and Engineer
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #4: Obrolan Ringan Seputar IT
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #2: Membuat Sendiri SMART HOME
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #1: Pemanfaatan Artificial Intelligence di Masa Covid-19
by LuriDarmawan in Tutorial & Community Project more 4 years ago - Tempat Latihan Posting
by LuriDarmawan in OOT more 4 years ago - Archive
- Looping lagi...
by idhiel in Hal umum tentang Pascal Indonesia more 12 years ago - [ask] koneksi ke ODBC user Dsn saat runtime dengan ado
by halimanh in FireBird more 12 years ago - Validasi menggunakan data tanggal
by mas_kofa in Hal umum tentang Pascal Indonesia more 12 years ago
Random Topic
- bagaimana menggunakan quick report
by divanda in Hal umum tentang Pascal Indonesia more 17 years ago - Rave di vista ultimate
by EkoIndri in Tip n Trik Pemrograman more 16 years ago - Menu pake TreeView di deplhi, Supaya Dinamis gimana ?
by palapetir in Tip n Trik Pemrograman more 18 years ago - SIP Delphi
by tatang.arifin in Hal umum tentang Pascal Indonesia more 17 years ago - tanya reporting
by ygmarta in Tip n Trik Pemrograman more 13 years ago - fingerprint
by gita in Hal umum tentang Pascal Indonesia more 16 years ago - info buku delphi
by wong_error in OOT more 17 years ago - Menjalankan aplikasi tanpa install exe di client
by nick04 in Network, Files, I/O & System more 13 years ago - Shout Box .... Kemanaaaa
by Manz in Hal umum tentang Pascal Indonesia more 17 years ago - Gimana bukin colom lewat aplikasi?
by anaconda in MySQL more 16 years ago