如何在c++中激发c#COM事件
How to fire c# COM events in c++?
我在c#中有一个接口,我在其中声明了事件,例如:
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("3839C631-AEDE-4535-9A28-15F4BFCA0C5A")]
public Interface Isample
{
event OnAdd(Isample sample);
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("E81B32A2-B98C-48C0-A235-17771EE001D6")]
[ComVisible(true)]
public class Sample:Isample
{
//'''''''''''''''''''''
}
我想在c#中激发这个事件,并通过firebreath将其监听到javascript中。
提前谢谢。
COM事件与C#事件有很大不同。它们更通用,事件监听器必须实现一个接口,并通过IConnectionPoint告知事件源。然后,事件源只需调用接口方法即可"引发"事件。因此,您需要:
- 编写一个声明方法而不是事件的接口。因此,在您的情况下,只需
void Add(ISample sample)
- 不要继承类声明中的接口,实现它是事件侦听器的工作
- 在C#类中声明一个公共事件,该事件的名称与接口中的方法完全匹配
- 通过告诉CLR接口,允许CLR为您实现IConnectionPointContainer,请使用
[ComSourcesInterfaces]
属性
MSDN的这篇文章展示了一个例子。
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IComScriptEngineEvents
{
/// <summary>
///
/// </summary>
/// <param name="message"></param>
[DispId((int)IComScriptEngineEventsDispatchIDs.CompileError)]
void CompileError(string message);
}
[ClassInterface(ClassInterfaceType.None)]
[ProgId("ScriptEngineComWrapper.ComScriptEngine")]
[ComVisible(true)]
[ComSourceInterfaces(typeof(IComScriptEngineEvents))]
public class ComScriptEngine : IComScriptEngine
{
[ComVisible(false)]
public delegate void CompileErrorDelegate(string message);
public event CompileErrorDelegate CompileError;
}
然后在comscriptengine中的方法内部调用//这个。CompileError("来自事件!");
我不知道为什么我有这个委托,但出于某种原因,我不得不使用它。来源是几年前写的。
VB脚本测试代码
Sub event_CompileError(strMessage)
MsgBox strMessage
End Sub
Set objScriptEngine = WScript.CreateObject("ScriptEngineComWrapper.ComScriptEngine", "event_")
相关文章:
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- Android NDK传感器向事件队列报告奇怪的间隔
- 从文本文件中读取时钟时间和事件时间并进行处理
- WMI检测进程创建事件-c++
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 处理闪烁窗口事件
- COM 事件需要 C3702 atl
- 将 COM 事件从 C# 触发到C++的正确方法是什么?
- Excel Automation-使用FindConnectionPoint过滤com事件
- 使用 C++向 COM 公开托管事件
- 识别与 Windows USB 虚拟 COM 端口的连接事件
- Reg Free进程外COM服务器事件
- 如何在c++中激发c#COM事件
- 在C++Builder中有COM事件处理的工作示例吗
- COM事件处理的最快方式(就性能而言)
- COM c++中的自定义事件处理
- 如何在QT中处理c# COM事件
- 如何实现C++COM事件处理的接收器
- 触发 COM 事件时 Lock()/Unlock() 调用的目的是什么?
- 用c++ (ATL, MFC或纯c++)处理COM事件,实现Java互操作