Condividi tramite


Errore del compilatore C3706

'function': deve essere un'interfaccia COM per generare eventi COM

L'interfaccia evento usata per generare eventi COM deve essere un'interfaccia COM. In questo caso, l'interfaccia deve essere definita usando un attributo Visual C++ o importata usando #import da una libreria dei tipi con l'attributo embedded_idl di #import.

Si noti che le #include righe dei file di intestazione ATL mostrate nell'esempio seguente sono necessarie per l'uso degli eventi COM. Per correggere questo errore, apportare IEvents (interfaccia di eventi) un'interfaccia COM applicando uno degli attributi seguenti alla definizione dell'interfaccia: oggetto, doppia o dispinterface.

Se un'interfaccia proviene da un file di intestazione generato da MIDL, il compilatore non lo riconoscerà come interfaccia COM.

L'esempio seguente genera l'errore 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;
   }
};