Global OLE instance pointers - Termination hangs
-
I need a help regarding OLE objects instantiaton and termination. I have a trial application which uses a dll which uses global instances of OLE pointers of an application as given below FMApplication *fmApp = NULL; FMCase *fmCase = NULL; CoInitialize is called during DLL_PROCESS_ATTACH and the above OLE objects are instantiated henceforth. However, on exit of the application, the process hangs saying issue with OLE pointers. I tried releasing OLE instance in DLL_PROCESS_DETACH. Somehow OLE instances could not release and hangs there. I have ensured CoUninitialize is not called anywhere before OLE instance Release. fmApp->Release(); //Fails here fmApp = NULL; fmCase->Release(); fmCase = NULL;
-
I need a help regarding OLE objects instantiaton and termination. I have a trial application which uses a dll which uses global instances of OLE pointers of an application as given below FMApplication *fmApp = NULL; FMCase *fmCase = NULL; CoInitialize is called during DLL_PROCESS_ATTACH and the above OLE objects are instantiated henceforth. However, on exit of the application, the process hangs saying issue with OLE pointers. I tried releasing OLE instance in DLL_PROCESS_DETACH. Somehow OLE instances could not release and hangs there. I have ensured CoUninitialize is not called anywhere before OLE instance Release. fmApp->Release(); //Fails here fmApp = NULL; fmCase->Release(); fmCase = NULL;
Do you know this (MSDN [^])
Because there is no way to control the order in which in-process servers are loaded or unloaded, do not call CoInitialize, CoInitializeEx, or CoUninitialize from the DllMain function.
?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
[My articles] -
I need a help regarding OLE objects instantiaton and termination. I have a trial application which uses a dll which uses global instances of OLE pointers of an application as given below FMApplication *fmApp = NULL; FMCase *fmCase = NULL; CoInitialize is called during DLL_PROCESS_ATTACH and the above OLE objects are instantiated henceforth. However, on exit of the application, the process hangs saying issue with OLE pointers. I tried releasing OLE instance in DLL_PROCESS_DETACH. Somehow OLE instances could not release and hangs there. I have ensured CoUninitialize is not called anywhere before OLE instance Release. fmApp->Release(); //Fails here fmApp = NULL; fmCase->Release(); fmCase = NULL;
To expand on CPallini's ansawer - here's Larry Osterman and Raymond Chen[^] on the subject - and they are two Windows guys who should know the real deal!
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p