Kompilatorfel C3706

"function" : måste vara ett COM-gränssnitt för att utlösa COM-händelser

Anmärkningar

Händelsegränssnittet som du använder för att utlösa COM-händelser måste vara ett COM-gränssnitt. I det här fallet bör gränssnittet antingen definieras med hjälp av ett Visual C++-attribut eller importeras med #import från ett typbibliotek med #import embedded_idl attribut.

Observera att raderna #include i ATL-huvudfilerna som visas i exemplet nedan krävs för att använda COM-händelser. Åtgärda det här felet genom att göra IEvents (händelsegränssnittet) till ett COM-gränssnitt genom att tillämpa något av följande attribut på gränssnittsdefinitionen: objekt, dubbel eller dispinterface.

Om ett gränssnitt kommer från en rubrikfil som genererats av MIDL kommer kompilatorn inte att känna igen det som ett COM-gränssnitt.

Example

I följande exempel genereras 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;
   }
};