次の方法で共有


コンパイラ エラー C3706

'function': COM イベントを発生させるには、COM インターフェイスを使用しなければなりません

COM イベントを発生するためのイベント インターフェイスは、COM インターフェイスである必要があります。 この場合、Visual C++ 属性を使用してインターフェイスを定義するか、#import の embedded_idl 属性を持つタイプ ライブラリから #import を使用してインポートする必要があります。

なお、以下のサンプルにある ATL ヘッダー ファイルの #include 行は、COM イベントを使用するために必要です。 このエラーを解決するには、インターフェイス定義に以下の属性のいずれかを適用して、IEvents (イベント インターフェース) を COM インターフェイスにします: objectdual、またはdispinterface

インターフェイスが MIDL によって生成されたヘッダー ファイルからの場合、コンパイラは COM インターフェイスとして認識しません。

次の例では C3706 が生成されます:

// C3706.cpp
// compile with: /c
// C3706 expected
#define _ATL_ATTRIBUTES 1
#include <atlbase.h>
#include <atlcom.h>
#include <atlctl.h>

[module(dll, name="idid", uuid="12341234-1234-1234-1234-123412341234")];

// Uncomment the following line to resolve.
// [object, uuid="12341234-1234-1234-1234-123412341237"]
__interface IEvents : IUnknown {
   HRESULT event1(/*[in]*/ int i);   // uncomment [in]
};

[dual, uuid="12341234-1234-1234-1234-123412341235"]
__interface IBase {
   HRESULT fireEvents();
};

[coclass, event_source(com), uuid="12341234-1234-1234-1234-123412341236"]
class CEventSrc : public IBase {
   public:
   __event __interface IEvents;

   HRESULT fireEvents() {
      HRESULT hr = IEvents_event1(123);
      return hr;
   }
};