我正在尝试创建一个用C ++编写的 Windows运行时(WinRT)组件(c ++ - cx),可以从我的UWP C#app调用。我遵循了这个MSDN Tutorial
这一切都很好。我能够建立和在Windows-10桌面和桌面上运行上面链接中指定的代码/示例;移动
我然后尝试创建一个更简单的WinRT组件。我按照与上面教程相同的步骤进行操作。创建了Windows运行时组件项目(文件 - >新建 - >项目 - > Visual C ++ - > Windows->通用 - > Windows运行时组件(通用Windows))
现在我的班级只有一个功能, getNum 基本上会返回 uint16
这是我的类头文件
#pragma once
#include <collection.h>
namespace WRT_sample
{
public ref class Class1 sealed
{
public:
Class1();
uint16 getNum();
};
}
这是相应的cpp文件:
#include "Class1.h"
using namespace WRT_sample;
using namespace Platform;
Class1::Class1()
{
}
uint16 Class1::getNum()
{
return 100;
}
我在使用VS-2015创建新WinRT项目时提供的相同类名(Class1.h&amp; Class1.cpp)。
这就是我用C#代码调用WinRT类的方法:
namespace CS_WRT_sample
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
initWRT();
}
void initWRT()
{
try
{
var nativeObj = new Class1();
var num = nativeObj.getNum();
this.Result2.Text = "Num from Cpp: " + num.ToString();
Debug.WriteLine("Num from Cpp: " + num);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
this.Result3.Text = ex.Message;
}
}
}
}
我能够建立和发展在桌面(x86 / x64本地计算机)上运行我的代码,但是当我尝试在Mobile(x86仿真器或ARM设备)上运行时,它失败并出现以下错误:
抛出异常:CS_WRT_sample.exe中的“System.IO.FileNotFoundException”
找不到指定的模块。 (来自HRESULT的例外: 0x8007007E)**
这是我看到的堆栈跟踪:
System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD)
在WRT_sample.Class1..ctor()
在CS_WRT_sample.MainPage.initWRT()
我的VS-2015详细信息:
MS Visual Studio Professional 2015
版本14.0.25123.00更新2
MS .NET Framework
版本4.6.01038
我不确定,为什么我遇到了这个问题,因为我遵循了MSDN教程中提到的相同步骤。 任何帮助将受到高度赞赏。
答案 0 :(得分:1)
如果使用直接引用C ++ winmd而不是P2P引用,则会遇到此问题。这很容易检查.csproj:
例如,你的.csproj不应该有这一行: .. \调试\ Abc_def \ Abc_Def.winmd
相反,请考虑使用以下内容: {1ee77824-eaa8-40f1-9b56-6f8ffa44e727} Abc_Def