2016-12-20 9 views
-1

おはよう。COM参照カウントは常に2です

私は最後の日にCOMで作業しましたが、インスタンスを作成すると、参照カウントは常に2になります。このトピックに関するいくつかの質問を読んで、頻繁に回答するとスレッドの内容が分かります。そこで、COMオブジェクトをプログラムの先頭に作成してからスレッドを作成し、作成直後に2にしました。私は全く使用しませんQueryInterface。すでに確立された参照カウントしてポインタを返す

hr = CoCreateInstance(CLSID_EventViewer, NULL, CLSCTX_LOCAL_SERVER, 
    IID_IEventViewer, (void**)&view); 
int count = view->AddRef(); 
+0

参照カウントはCOMでクライアントに認識されません。クライアントはAddRefとReleaseコール(など)と一致する必要があります。どこから2を取得していますか? –

+0

AddRefからの戻り値としてこの値を取得しました.AddRefの戻り値が新しい参照カウントであるため、値1を期待していました。 – viceriel

+0

実際には、AddRefの戻り値は信頼できず、テスト目的にのみ使用する必要があります。 –

答えて

2

あなたがCoCreateInstanceを呼び出し、。 (あなたが最終的にそれを解放するためにReleaseを呼び出す必要があります。)

あなたがAddRefを呼び出すと、(2)参照カウントを増やす。なぜオブジェクトを作成した直後にAddRefに電話していますか?

+0

私はツールを管理していました。このパターンは常にコードで使用されていました。ありがとうございました。 – viceriel

+0

メモリリークのレシピのように聞こえる*が、コード全体を見ることなく、確かめるのは難しい。規約には、Releaseへの二重呼び出しも含まれています。たとえば、ローカル変数CoCreate、メンバー変数へのAddRef +コピー、ローカル変数の解放、最終的にリリースメンバー。それは賢明だろう。 –

関連する問題