2009-08-20 4 views
0

MSDN article(CoRevokeGetClassObject())は、COMサーバーがそれを呼び出すと、クライアントによって参照されるクラスオブジェクトが解放されないことを示しています。CoRevokeClassObjectに関するMSDNの記事の利点は何ですか?

他のクライアントが依然としてクラスオブジェクトへのポインタを持っていて、IUnknown :: AddRefへの呼び出しによってreference> countをインクリメントすると、参照カウントは0より大きくなりません。これが発生すると、クラスオブジェクトへの後続の呼び出し(IUnknown :: AddRefとIUnknown :: Releaseの明白な>例外を伴う)が失敗した場合にアプリケーションが役立ちます。

"アプリケーションはメリットがある"とはどういう意味ですか?クラスオブジェクトは解放されませんが、作成要求は失敗します。合理的だと思うが、どこに利益があるのだろうか?

答えて

0

うん、それは言葉のかなり奇妙番です...

私は彼らが言うことをしようとしているが、彼らはちょうどと呼ばれるサーバーからオブジェクトを作成する場合、クライアントはトリッキーな状況で終わる可能性があることだと思いますCoRevokeClassObjects

アクティブ化の呼び出し(IClassFactory::CreateInstance)が失敗しない場合、クライアントはインターフェイスポインタを戻します。これは、サーバーがシャットダウンされたときにすぐに消えてしまう可能性があるからです(CoRevokeClassObjects)彼らがメソッドを呼び出すとすぐに、RPCレイヤーからサーバーがなくなったというエラーが発生します。私はIUnknown::Releaseが他のクライアント対CoRevokeClassObjects経由で呼び出された場合を検出するかどうかはわかりませんが、私は、コードの取り消しを仮定し、言った私は

:-)それは何らかの方法で「有益」だと仮定し

ファクトリは、作成要求が送信される前に確認できるグローバル状態または工場ごとの状態を設定できます。

関連する問題