Erreur du compilateur C3706
'function' : doit être une interface COM pour déclencher des événements COM
L’interface d’événement que vous utilisez pour déclencher des événements COM doit être une interface COM. Dans ce cas, l’interface doit être définie à l’aide d’un attribut Visual C++ ou importée à l’aide de #import à partir d’une bibliothèque de types avec l’attribut embedded_idl de #import.
Notez que les #include
lignes des fichiers d’en-tête ATL indiqués dans l’exemple ci-dessous sont requises pour l’utilisation d’événements COM. Pour corriger cette erreur, effectuez IEvents
(l’interface d’événement) une interface COM en appliquant l’un des attributs suivants à la définition de l’interface : objet, double ou dispinterface.
Si une interface provient d’un fichier d’en-tête généré par MIDL, le compilateur ne le reconnaît pas en tant qu’interface COM.
L’exemple suivant génère l’erreur 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;
}
};