dcl
asked on
DLL init & close problem
Hi there
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(n il)
if CommonDataModuleVariable = nil then CommonDataModuleVariable := TCommonDataModule.create(n il)
The CloseReport procedure is similar
if ReportDataModuleVariable <> nil then ReportDataModuleVariable.f ree
if CommonDataModuleVariable<> nil then CommonDataModuleVariable.f ree
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
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(n
if CommonDataModuleVariable = nil then CommonDataModuleVariable := TCommonDataModule.create(n
The CloseReport procedure is similar
if ReportDataModuleVariable <> nil then ReportDataModuleVariable.f
if CommonDataModuleVariable<>
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
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
ASKER
While implementing your suggestion I also found I was not actually calling the CloseReport method correctly, so that helped too.