Re: Globals not deleted
This class is intended to be used in executables ONLY.
--
=====================================
Alexander Nickolov
Microsoft MVP [VC], MCSD
email: agnickolov@mvps.org
MVP VC FAQ: http://www.mvps.org/vcfaq
=====================================
"Martin Hignett" <Martin Hignett@discussions.microsoft.com> wrote in message
news:66EDE68C-D407-4B4C-A044-36595EFBDC02@microsoft.com...
I have recently upgraded a project from Visual Studio 6 to .Net 2003. The
project included a DLL COM server with a thread pool. The thread pool in
the
original project was created using the following code:
class CAtlGlobalModule : public
CComAutoThreadModule<CComSimpleThreadAllocator>
{
public:
UTILEXPORT LONG Lock();
UTILEXPORT LONG Unlock();
};
This calls was then declared as a global called _Module and used to
register
COM objects &c. The COM server worked as expected. However, since this was
a
DLL, the server never shutdown so, even when using regsvr32.exe to
register
the objects, the calling application never shutdown.
After some research, I replaced the code above with the following:
class CAtlGlobalModule : public CAtlDllModuleT<CAtlGlobalModule>, public
CAtlAutoThreadModuleT<CAtlGlobalModule, CComSimpleThreadAllocator, 1000>
{
public:
UTILEXPORT LONG Lock();
UTILEXPORT LONG Unlock();
};
and the server shuts down correctly. No other code was changed. However,
none of my globals are deleted! The Visual Studio 6 build worked correctly
(i.e. shutdown) and did not have any reported memory leaks.
I have a few questions:
* Is this the correct way to create a thread pool with ATL 7.1?
* Could this thread pool change be the reason non of my globals are
deleted?
It is possible that this is unrelated as my application didn't shutdown
until
I made this change...
* Are there any other changes between VisualStudio 6 and .Net 2003 that
might cause this problem?
* Is it possible these memory leaks were happening in VC6 but were never
reported?
Thanks in advance for any help, tips or suggestions!