Arsip: [Ask] Free DLL Handle

more 11 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 11 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 11 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 11 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 11 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 11 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 11 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 2 years ago - PascalTalk #5: UX: Research, Design and Engineer
by LuriDarmawan in Tutorial & Community Project more 2 years ago - PascalTalk #4: Obrolan Ringan Seputar IT
by LuriDarmawan in Tutorial & Community Project more 2 years ago - PascalTalk #2: Membuat Sendiri SMART HOME
by LuriDarmawan in Tutorial & Community Project more 2 years ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 2 years ago - PascalTalk #1: Pemanfaatan Artificial Intelligence di Masa Covid-19
by LuriDarmawan in Tutorial & Community Project more 2 years ago - Tempat Latihan Posting
by LuriDarmawan in OOT more 3 years ago - Archive
- Looping lagi...
by idhiel in Hal umum tentang Pascal Indonesia more 10 years ago - [ask] koneksi ke ODBC user Dsn saat runtime dengan ado
by halimanh in FireBird more 10 years ago - Validasi menggunakan data tanggal
by mas_kofa in Hal umum tentang Pascal Indonesia more 10 years ago
Random Topic
- Bikin Thread Dulu Ah...
by tendafahmi in OOT more 12 years ago - gimana nulis variable data numerik ke "insert into &quo
by goehsatrio in MySQL more 15 years ago - OUT OF MEMORY
by darsaneit in Tip n Trik Pemrograman more 11 years ago - Parsing string
by tox2wow in Network, Files, I/O & System more 17 years ago - Tips lengkap membuat aplikasi untuk mengakses Web Service
by EkoIndri in Delphi.NET more 15 years ago - Tip Membuat/Membaca Tanggal dengan Fungsi Sendiri
by hasan_plg in Tip n Trik Pemrograman more 16 years ago - Client Server pake dial-up
by kiki-Delphi in Network, Files, I/O & System more 16 years ago - Bgm cara baca dta mysql yg terdapat pd komp. lain???-3 tier
by sukuguci in MySQL more 16 years ago - Dbexpress & mssql
by bad2001 in Tip n Trik Pemrograman more 16 years ago - load image ke paintbox
by imamnet86 in Hal umum tentang Pascal Indonesia more 13 years ago