首页 > 解决方案 > 我如何注册从本机 c++ 到 c# 的回调

问题描述

我正在从事一项用 c# (WPF) 编写 UI 的任务。还有一些其他模块是用本机 C++ 实现的。我需要从 c++ 模块注册回调到 c# 模块,通过它我可以获得任何变量的更新值(如字符串类型)。例如: 在 c++ 中:

String str =" ";

如果 c++ 模块对 str 进行了任何更改,例如 str="and"; 然后我需要将此更新后的值发送到 c# 模块。

请建议我如何做到这一点?
PS:C# 和 c++ 模块在不同的 dll 中。如果有任何事情需要更改 dll 属性,这对我来说也可以。

提前致谢。

标签: c#c++wpfcallback

解决方案


我总是通过使用在 C# 中声明并在 C#(当您需要处理从 C++ 到 C# 的回调时)和在 C++ 中实现的 COM 接口来解决这个问题。您必须在 C# 和 COM 可见的接口中声明

   [ComVisible(true)]
   [GuidAttribute("12347261-8AF6-45ae-BAFD-6DFF7A8798E4")]
   [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
   public interface ICOMInterface
   { *** }

之后基于 .tlb、.tlh 在 C++ 中实现接口


推荐阅读