gpt4 book ai didi

windows-phone-8 - 在 WP8 中从 C++ 代码调用 C# 方法

转载 作者:行者123 更新时间:2023-12-03 21:10:24 29 4
gpt4 key购买 nike

我有兴趣从 Windows Phone 8 中的 C++ 代码调用 C# 方法。我已经学会了如何通过我的 C++ 代码中的委托(delegate)声明将回调函数从 C# 传递给 C++ 代码,但我正在寻找是否可以做到以下任何一项:

  • 直接从 C++ 代码调用某些方法。这将涉及以某种方式检查 C++ 中的 C# 对象构成,这对我来说似乎不太可能,但我想无论如何我都会问你们
  • 在 C# 代码中触发事件,然后可以通过 C# 方法处理
  • 使用调度程序在主 UI 线程中调用 C# 回调,以便回调可以修改 UI 元素
  • 在C#代码中使用dispatcher触发事件,(本质上是以上两点的合并)

  • 简而言之,我正在寻找尽可能多的 C++ -->C# 通信技巧,你们可以扔给我,我想学习这一切。 :)

    最佳答案

    通过在 C# 代码中获取一个对象来实现 Windows RT 接口(interface),并传递对该对象的引用,可以通过一些设置来完成上述所有操作(如果我理解正确 - 不确定到底是什么您想要处理您的 Dispatcher 示例 - 您可能希望将 Dispatcher 包装在 C# 端)。

  • 创建 Windows 运行时组件库。
  • 定义一个 public interface class在 C# 实现的 C++/CX header 中(C++ 调用)(例如 ICallback )。
  • 定义一个 public ref class在 C++/CX header 中供 C++ 实现(C# 调用)(例如 CppCxClass )。
  • CppCxClass 中添加一个方法传递并存储 ICallback . (为了简洁起见,显示了一个 C++ 全局变量,我建议您查看此内容以查看是否可以找到更好的位置将其存储在您的代码库中)。

    ICallback^ globalCallback;
    ...
    void CppCxClass::SetCallback(ICallback ^callback)
    {
    globalCallback = callback;
    }
  • 在 C# 代码中引用 WinRT 库。
  • C# 代码:创建 CppCxClass 的实例使用 var cppObject = new CppCxClass() .
  • C# 代码:创建一个实现 ICallback 的类(例如 CSharpCallbackObject )。
  • C# 代码:传递 CSharpCallbackObject 的实例一直到 C++。例如。 cppObject.SetCallback(new CSharpCallbackObject()) .

  • 您现在可以使用 globalCallback->CallCsharp(L"Hello C#"); 调用 C# .您应该能够扩展 ICallback和/或 CppCxObject完成其余的任务。

    关于windows-phone-8 - 在 WP8 中从 C++ 代码调用 C# 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14434874/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com