ユーザーが [ログイン] ボタンを押したときに呼び出される StartComObjects 関数と、ユーザーが [キャンセル] ボタンを押したときに呼び出される StopComObjects 関数があります。StartComObjects 関数は、CComPtr.CoCreateInstance を使用して COM オブジェクトを作成し、AfxConnectionAdvise を使用していくつかのコネクション ポイントを設定します。ユーザーが [キャンセル] ボタンを押すと、接続ポイントは AfxConnectionUnadvise を使用して切断され、CComPtr で Release を呼び出す前に COM オブジェクトが停止されます。
ログイン ボタンをもう一度押すと、CComPtr.CoCreateInstance が 0x80070582 を返します (クラスは既に存在します)。これにより、StartComObjects の 2 回目の呼び出しで COM オブジェクトが作成されなくなります。なぜこれが機能しないのかわかりません。CComPtr::Release で COM オブジェクトを解放し、古いオブジェクトが停止された後に新しいオブジェクトを作成できるようにすべきではありませんか? これを回避する方法はありますか?