Freigeben über


Compilerfehler C3719

'Schnittstelle': Eine schnittstellenbasierte Ereignisquelle kann nur für COM-Ereignisse verwendet werden.

Bemerkungen

Sie haben eine Schnittstelle in einem Nicht-COM-Kontext deklariert.

Example

Im folgenden Beispiel wird C3719 generiert:

// C3719a.cpp
#define _ATL_ATTRIBUTES 1
#include "atlbase.h"
#include "atlcom.h"

[module(name="MyLibrary", version="1.2", helpfile="MyHelpFile")];

[object]
__interface I {
   HRESULT func1();
};

[event_source(native), coclass]
struct A {
   __event __interface I;   // C3719

   // try the following line instead
   // __event func2();
};

int main() {
}

Um diesen Fehler zu beheben, wenden Sie das Objekt, die Co-Klasse, event_source und event_receiver Attribute entsprechend an, um die Klassen zu erstellen, in denen Sie die Schnittstellen-COM-Klassen verwenden. Zum Beispiel:

// C3719b.cpp
#define _ATL_ATTRIBUTES 1
#include <atlbase.h>
#include <atlcom.h>

[module(name="xx")];
[object, uuid("00000000-0000-0000-0000-000000000001")]
__interface I {
   HRESULT f();
};

[coclass, event_source(com) , uuid("00000000-0000-0000-0000-000000000002")]
struct MyStruct {
   __event __interface I;
};

[event_receiver(com)]
struct MyStruct2 {
   void f() {
   }
   MyStruct2(I* pB) {
      __hook(&I::f, pB, &MyStruct2::f);
   }
};

int main()
{
}