c# - 如何从 C++ 后台任务(Windows 通用应用程序)调用 C# 函数?

标签 c# c++ windows-runtime windows-phone-8.1 win-universal-app

我正在将我的应用程序(使用自定义动态磁贴)重写为通用应用程序。以前,我使用第 3 方库来渲染这些自定义动态磁贴。这个库不再受支持,所以我必须找到一种新的方法来做到这一点。似乎 XamlRenderingBackgroundTask是目前唯一的前进方向,但这是在 C++ 中。我的应用程序的其余部分在 C# 中。

我的后台任务应该从公共(public) API 获取数据(例如天气),并使用此信息来渲染动态图 block 。我已经编写了用于获取数据的类(我也在主应用程序中使用它们),但这些是用 C# 编写的。

现在,使用 Windows 运行时组件应该可以“混合”不同的语言(对吗?)。但是我该如何实现呢? (缺少具体示例)。

简而言之:如何从我的 C++ 后台任务中调用 C# 函数(将返回数据)

我已经创建了一个非常示例 - 我想从我的 C++ 后台任务运行 RunTheFunction 和 RunAnotherFunction。

public class StackOverFlowExampleClass()
{
    public string Name { get; set; }
    public string Value { get; set; }
}

public class StackOverFlowExampleClass2()
{
    public string UpperString { get; set; }

}

public async Task<StackOverFlowExampleClass> RunTheFunction(int ParameterValue)
{
    StackOverFlowExampleClass overflowClass = new StackOverFlowExampleClass();
    overflowClass.Name = "Stack Overflow";
    overflowClass.Value = 1 + ParameterValue;

    // DO SOME COOL ADVANCED HTTP STUFF
    return overflowClass;
}

public async Task<StackOverFlowExampleClass> RunAnotherFunction(string ExampleString)
{
    StackOverFlowExampleClass2 overflowClass2 = new StackOverFlowExampleClass2();
    overflowClass2.UpperString = ExampleString.ToUpper();

    return overflowClass2;
}

在正常的 C# 后台任务中,我会这样做:

StackOverFlowExampleClass SFClass = await stackoverflowexample.RunTheFunction(10);
StackOverFlowExampleClass2 SFClass = await stackoverflowexample.RunAnotherFunction("stackoverflow");
///// render SFClass.Value + SFClass.Name as a PNG
///// set tile title to SFClass.UpperString

我如何在 C++ 中执行此操作?

最佳答案

您可以查看 Visual C++ Compiler November 2013 CTP ,一些漂亮的例子来做这样的事情: __await FileIO::WriteTextAsync(文件, 文件->名称);

它看起来还不太好,很可能在未来的版本中会出现标准的发展、新的和更好的(至少是标准的)方法来做到这一点。

关于c# - 如何从 C++ 后台任务(Windows 通用应用程序)调用 C# 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24910279/

相关文章:

c++ - 转换指向基类的指针列表

.net - 如何从 Metro P/Invoke 到 native dll?

c++ - 在cpp中初始化数组并用零填充

windows-8 - 在 Metro 风格应用程序中使用单词 "Windows"作为您自己的命名空间的一部分

c# - 流套接字错误处理 winRT

c# - Entity Framework 控制台应用程序连接到错误的数据库

C# 泛型 : Can you convert <T> ToString?

c# - 如何将 IntPtr 转换为 int

c# - 如何使用从数据库派生的相对文件路径将 WPF 图像元素绑定(bind)到本地硬盘驱动器上的 PNG?

c++ - 从文件中读取数据到结构数组 C++