I have a StartComObjects function called when the user presses the Login button and a StopComObjects function called when the user presses the Cancel button. The StartComObjects function uses CComPtr.CoCreateInstance to create the COM object and sets up some connection points using AfxConnectionAdvise. When the user presses the Cancel button the connection points are disconnected using AfxConnectionUnadvise and the COM object is stopped before calling Release on the CComPtr.
When I press the login button a second time the CComPtr.CoCreateInstance returns 0x80070582 (Class already exists). This prevents the COM object from being created on the second call to StartComObjects. I am not sure why this isn't working. Shouldn't CComPtr::Release free the COM object and allow me to create a new one after the old one was stopped? Is there any way to get around this?