如何在非托管C+中实现C#接口事件+/ATL

如何在非托管C+中实现C#接口事件+/ATL,c#,c++,events,com,atl,C#,C++,Events,Com,Atl,我确实在C#中定义了一个接口,其事件如下: [ComVisible(true)、InterfaceType(ComInterfaceType.InterfaceIsDual)、Guid(“02F91299-B87C-47D2-B501-7768E767E012”)] 公共接口IFoo { 事件FooEventHandler FooEvent; } [ComVisible(true),Guid(“2CB3858D-5729-47A1-B46B-C2C37C522E10”)] 公共委托void Fo

我确实在C#中定义了一个接口,其事件如下:

[ComVisible(true)、InterfaceType(ComInterfaceType.InterfaceIsDual)、Guid(“02F91299-B87C-47D2-B501-7768E767E012”)]
公共接口IFoo
{
事件FooEventHandler FooEvent;
}
[ComVisible(true),Guid(“2CB3858D-5729-47A1-B46B-C2C37C522E10”)]
公共委托void FooEventHandler(IFoo发送方,int状态);

我必须在非托管C++ ATL DLL中实现这个接口。代码类向导建议:

STDMETHOD(add_FooEvent)(_FooEventHandler*值);
STDMETHOD(remove_FooEvent)(_FooEventHandler*值);
我将FooEventHandler视为IDispatch对象。 我确实将这些_FooEventHandler*值添加/删除到列表中

现在我的问题是:如何为所有存储的\u FooEventHandler触发/调用此事件

谢谢, 卡比

更新:
我在这里找到了答案:

我想您应该使用IConnectionPointImpl模板类实现IConnectionPoint,后者将有一个订阅事件的事件接收器集合。感谢您的评论,我知道如何从DLL项目IDL文件实现事件,以及您如何正确地建议,这是通过“IConnectionPointImpl”实现的。但这次我必须实现一个“extern”C#接口,类向导只提供那些传递IDispatch对象的添加/删除对…:(可以要求ReGASM导出一个类型,然后将代码>导入导入/VisualC++,这样界面就可以看到C++代码。然后,您只需从代码>继承ICONNECTONPORIMPILP/CODE >继承,使用大量RASP文件。我已经有了TLB文件并导入到我的C++项目中。“…并使用大量rasp文件”我的意思是,您必须编写一些代码并对其进行调整,直到其生效。第一步是从
IConnectionPointImpl
继承COM对象类。