DLL init & close problem
Posted on 2006-03-21
I have a problem with a dll I am writing.
The DLL produces a report from a BDE databse using Crystal Reports.
When used by a single exe it works fine.
However, when I open 2 exes, & print a report from both (using dll calls), I encounter a problem.
All appears to run OK, but when I close the second exe, it does not exit. Although it dissappears from the screen, it is still visible in the processes list on the task manager.
Until I terminate this unclosed process, I cannot run any BDE apps. They all appear in the process list too, but never make it to the screen.
I think it has something to do with the exes closing down - maybe the first exe to close clears the dll memory so the second one can't close it & locks up.
Here is a brief description of my dll:
There are 2 data modules: Reportdata & CommonData
The dll project file has them in it's uses clause, ie
uses ... ReportData, CommonData...
The ReportData module also "uses CommonData" in it's implementation section uses clause
There are 4 exported functions, all of which are coded in ReportData:
InitReport, CalcReport, ShowReport, CloseReport.
InitReport does this:
if ReportDataModuleVariable = nil then ReportDataModuleVariable := TReportDataModule.create(nil)
if CommonDataModuleVariable = nil then CommonDataModuleVariable := TCommonDataModule.create(nil)
The CloseReport procedure is similar
if ReportDataModuleVariable <> nil then ReportDataModuleVariable.free
if CommonDataModuleVariable<> nil then CommonDataModuleVariable.free
The exes that use the dll call InitReport first, & Close Report when they exit
I am hoping that there is somethings basic I am getting wrong with my dll - it is the first one I have done so I have been guessing everything