[PR]

インターフェイスを使用したコードで
コンパイルエラーがでる

戻る

 インターフェイス(IMalloc, IPersistFile, IShellDispatch, IShellFolder, IShellLink など)の使い方は、C言語とC++言語とで異なります。

エラーメッセージの例:
 'lpVtbl' : 'インターフェイス' のメンバではありません。
 'メソッド' : 'インターフェイス' のメンバではありません。
 'ポインタによる関数の呼び出し' : 実引数が少なすぎます。
 'メソッド' : 関数が不正な 3 個の実引数をともなって呼び出されました。

原因:
 インターフェイスの使い方は、C言語とC++言語とで異なります。

 C言語では、メソッドの呼び出しを、メンバ lpVtbl を介して行います。
 C++言語では、メソッドの呼び出しを、メンバ lpVtbl を介さずに行います。
 C言語では、メソッドの第一引数に、自分自身へのポインタを渡します。
 C++言語では、メソッドの第一引数は、自動的に渡されます。

 C言語での使用例:
 psl->lpVtbl->SetArguments( psl, Arguments );
 psl->lpVtbl->QueryInterface( psl, &IID_IPersistFile, (void **)&ppf );
 ppf->lpVtbl->Release( ppf );
 pshf->lpVtbl->Release( pshf );

 C++言語での使用例:
 psl->SetArguments( Arguments );
 psl->QueryInterface( IID_IPersistFile, (void **)&ppf );
 ppf->Release();
 pshf->Release();

関連

関数 CoCreateInstance() を使用したコードでコンパイルエラーがでる


Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp

>> 扉の外 I / II / III