首页 > 解决方案 > 将 C++ 回调函数传递给 COM 进程外方法

问题描述

已经回答了关于将 C++ 回调传递到进程内 COM 方法的问题。但是相同的技术不适用于进程外使用。

我有一个 C# 接口,它有一个使用两个参数注册回调/委托的方法。

void ProcessNotification(ConsoleNotificationType type, IntPtr parameter);

此 C# 接口是使用进程外 COM 配置(exe 文件)注册的。现在我想将 C++ 回调函数传递给该方法,但 Visual Studio 给了我一个错误:

InvalidFunctionPointerInDelegate

那么,如何将我的 C++ 回调函数传递给接口的注册回调函数呢?

标签: c#c++callbackcomout-of-process

解决方案


COM 中没有任何东西可以让您如此简单地做到这一点。在我能想到的任何编程范式中,您甚至都无法做到这一点。一个进程中的指针在另一个进程中是没有意义的。

官方的答案是定义一个回调接口并在实现对象上传递对该接口的引用,而不是传递一个简单的函数指针。而且,当然,您必须确保可以代理接口。(或者,您可以IConnectionPointContainer在您的服务器上实现,这基本上是相同的想法。)


推荐阅读