Link to home
Create AccountLog in
Avatar of dcl
dclFlag for Australia

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(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
ASKER CERTIFIED SOLUTION
Avatar of Lukasz Zielinski
Lukasz Zielinski
Flag of Poland image

Link to home
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
See answer
Avatar of dcl

ASKER

Thanks ziolko

While implementing your suggestion I also found I was not actually calling the CloseReport method correctly, so that helped too.