c# - 我如何注册从本机 c++ 到 c# 的回调
问题描述
我正在从事一项用 c# (WPF) 编写 UI 的任务。还有一些其他模块是用本机 C++ 实现的。我需要从 c++ 模块注册回调到 c# 模块,通过它我可以获得任何变量的更新值(如字符串类型)。例如: 在 c++ 中:
String str =" ";
如果 c++ 模块对 str 进行了任何更改,例如 str="and"; 然后我需要将此更新后的值发送到 c# 模块。
请建议我如何做到这一点?
PS:C# 和 c++ 模块在不同的 dll 中。如果有任何事情需要更改 dll 属性,这对我来说也可以。
提前致谢。
解决方案
我总是通过使用在 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++ 中实现接口
推荐阅读
- .net - 如何在vs代码中打开现有的blazor项目
- ios - Safari IOS 剪辑路径不起作用
- opengl - 硬件不支持定义的纹理数量(使用 VTK/PCL)
- java - java.lang.reflect.InvocationTargetException,由:java.lang.NoClassDefFoundError:com/fasterxml/jackson/databind/ObjectMapper引起
- javascript - 如何从两个不同的表单集中只选择一个单选按钮?
- javascript - Fabricjs:撤消时不呈现背景图像
- debugging - Visual Studio 2017 调试打开新浏览器
- shell - sqlldr shell 脚本将 csv 导入到 oracle
- java-8 - 如何在 java 8 中评估第 2 行?
- uicollectionview - 增加按钮按下时collectionview单元格的高度并滚动到底部