我有一个本机 C++ 应用程序,它公开了一个带有许多事件的 COM 接口;插件订阅这些事件的一个子集。我在应用程序中添加了对 CLR 托管的支持,并编写了一个自定义主机/应用程序域管理器接口,该接口加载了一个从 AppDomainManager 继承的 C#“加载器”程序集(大致基于http://www.codeproject.com/Articles/416471上的示例/CLR-托管-自定义-CLR) 可以正常加载我的应用程序的托管插件。我现在正在处理的问题是我希望能够通过加载器动态地将应用程序事件连接到托管插件回调函数;我想遍历应用程序通过 COM 接口公开的每个事件,在插件中找到匹配的函数(名称/参数),并附加事件处理程序。在托管(插件)方面,这可以通过反射 API(迭代插件程序集并检查类型/方法),但我想知道是否可以从 COM 接口获取事件的集合非托管方。我现在使用特殊的 tlbimp 事件/委托类型来静态连接事件处理程序:
appInterface.Function += new _IApplicationEvents_FunctionEventHandler(Function);
有什么办法可以绕过以这种方式显式连接每个事件处理程序,还是我被卡住了?我想知道是否有某种方法可以遍历通过互操作创建的特殊委托类型,并获取通过托管类的反射 API 可用的相同类型的名称/参数信息。