次の方法で共有


CoReleaseServerProcess 関数 (combaseapi.h)

グローバルなプロセスごとの参照カウントをデクリメントします。

構文

ULONG CoReleaseServerProcess();

戻り値

サーバー アプリケーションでクリーンアップを開始する必要がある場合、関数は 0 を返します。それ以外の場合、関数は 0 以外の値を返します。

注釈

サーバーは CoReleaseServerProcess を 呼び出して、 CoAddRefServerProcess の呼び出しによってインクリメントされたグローバルなプロセスごとの参照カウントをデクリメントできます。

その数が 0 に達すると、OLE は 自動的に CoSuspendClassObjects を呼び出します。これにより、新しいアクティブ化要求が送信されなくなります。 これにより、サーバーは、別のアクティブ化要求が入ってくる可能性があることを心配することなく、さまざまなスレッドからクラス オブジェクトを登録解除できます。 新しいアクティブ化要求により、ローカル サーバー プロセスの新しいインスタンスが起動されます。

ローカル サーバー アプリケーションでこれらの関数を使用する最も簡単な方法は、各インスタンス オブジェクトのコンストラクターで CoAddRefServerProcess を呼び出し、fLock パラメーターが TRUE の場合は各 IClassFactory::LockServer メソッドで呼び出す方法です。 また、サーバー アプリケーションは、各インスタンス オブジェクトのデストラクターで CoReleaseServerProcess を呼び出し、fLock パラメーターが FALSE の場合は各 IClassFactory::LockServer メソッドで呼び出す必要があります。 最後に、サーバー アプリケーションは CoReleaseServerProcess からリターン コードをチェックする必要があります。0 を返す場合、サーバー アプリケーションはクリーンアップを開始する必要があります。 これは通常、複数のスレッドを持つサーバーが、さまざまなスレッドにメッセージ ループを終了し、 CoRevokeClassObjectCoUninitialize を呼び出すように通知する必要があることを意味します。

これらの API をまったく使用する場合は、オブジェクト インスタンスと LockServer メソッドの両方で呼び出す必要があります。そうしないと、サーバー アプリケーションが途中でシャットダウンされる可能性があります。 インプロセス サーバーでは、通常、 CoAddRefServerProcess または CoReleaseServerProcess を呼び出さないでください。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー combaseapi.h (Objbase.h を含む)
Library Ole32.lib
[DLL] Ole32.dll

こちらもご覧ください

CoAddRefServerProcess

CoSuspendClassObjects

IClassFactory::LockServer

アウトプロセス サーバー実装ヘルパー