VS2012プロジェクトでCOMオブジェクトを使用したい。これらの目的のために、私はオブジェクトを記述するIDLファイルを与えられました。私は私のプロジェクトにこのヘッダを含む場合、しかしIDLで作成されたCOMオブジェクトを使用しようとするとリンカーエラーが発生する
EXTERN_C const CLSID CLSID_COComponent;
#ifdef __cplusplus
class DECLSPEC_UUID("bla bla bla")
COComponent;
#endif
を、そしてCoCreateInstance
呼び出しでCLSID_COComponent
を使用しよう:.:私はこのような(部分的に)見えるヘッダファイルを生成するMIDLを使用していました
CComPtr<IModelService> m_IModelService;
hRes = m_IModelService.CoCreateInstance(CLSID_COComponent, NULL, CLSCTX_ALL);
私は、リンカエラーを取得:私は__uuidof(COComponent)
を使用する場合
Error 123 error LNK2001: unresolved external symbol _CLSID_COComponent
はしかし、それが正常に動作します。また、生成されたコードからEXTERN_C
を削除すると、コンパイルされます。
全く同じコードが別のプロジェクトで使用されていますが、私はそれが動作するのを見てきました。私の質問は、私は何が間違っていますか?
通常、MIDLはGUID定義、/ iidコマンドラインオプションを含む.cファイルも生成します。あなたのプロジェクトにそれが含まれていないようです。 __uuidキーワードを使用するのは、実際には単純で完全に有効な回避策です。 –
[インターフェイスUUIDファイル](https://msdn.microsoft.com/en-us/library/windows/desktop/aa367283.aspx)通常、フォーマットは* _i.c *です。コンパイルして最終的な実行可能イメージにリンクする必要があります。 –
IInspectable
偉大な、それは確かにトリックでした!あなたが答えとして投稿するなら、私はそれを受け入れることができます。 – Frank