Re: ATL com server can pass interface as parameters?
"Ceasar" <ceasar.chen@gmail.com> wrote in message
news:1176974114.556344.55540@y80g2000hsf.googlegroups.com
OLE32.dll access violation causes by VC6 debugger with smart pointer
used.
Declare interfaces with smart pointer and trace it with VC6 debugger
=> Access violation at the end of application.
CComPtr<IMy1> pMy1;
CComPtr<IMy2> pMy2;
My psychic powers tell me you have code similar to this:
int main() {
CComPtr<IMy1> pMy1;
CComPtr<IMy2> pMy2;
CoInitialize(0);
pMy1 = ...;
pMy2 = ...;
// do something
CoUninitialize();
return 0;
// crash here
}
Smart pointers go out of scope at the closing curly brace. At this
moment they call Release() on underlying raw pointer. But,
CoUninitialize has already been called - after that, any COM call is
illegal and is likely to lead to a crash. You must arrange for all
interface pointers to be released before CoUninitialize is called.
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925