Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
'function' : doit être une interface COM pour déclencher des événements COM
Remarques
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 utiliser des é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.
Example
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;
}
};