我想創建一個Windows運行時(WinRT)用C++(C++ - cx)編寫的組件,可以從我的UWP C#應用程序調用。我跟着這個MSDN Tutorial
這一切都很順利。我能夠構建&在Windows-10桌面上運行上述鏈接中指定的代碼/示例& Mobile
然後我嘗試創建一個更簡單的WinRT組件。我遵循了上述教程中的相同步驟。創建一個Windows運行時組件項目(文件 - >新建 - >項目 - > Visual C++ - > Windows->通用 - > Windows運行時組件(通用Windows))
現在我的班級只有一個功能,getNum基本上返回一個UINT16
這是我的類的頭文件UWP C#應用程序調用使用C++編寫的Windows運行時組件
#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 & Class1.cpp)。
這是我作出的WinRT類的呼叫從我的C#代碼:
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本地計算機)上運行我的代碼,但是當我嘗試運行上移動(x86模擬器或ARM裝置),它失敗,錯誤如下:
Exception thrown: 'System.IO.FileNotFoundException' in CS_WRT_sample.exe
The specified module could not be found. (Exception from HRESULT: 0x8007007E)**
這是堆棧跟蹤我看到:
System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD)
at WRT_sample.Class1..ctor()
at CS_WRT_sample.MainPage.initWRT()
我的VS-2015詳細信息:
MS Visual Studio Professional 2015
Version 14.0.25123.00 Update 2
MS .NET Framework
Version 4.6.01038
我不知道,爲什麼我打的問題,因爲我也跟着在MSDN教程中提到的相同步驟。 任何幫助將不勝感激。
我在我的機器上試了一下效果很好本地機和x86模擬器,是有你沒有任何特殊的步驟? – 2power10
Hi @ 2power10,謝謝你的迴應。這很奇怪。我將我的項目複製到我朋友的機器上,並在他的機器上運行。他也看到了同樣的行爲。不,我沒有做任何特別的事情。正如我所提到的,我遵循了與MSDN教程中列出的步驟相同的步驟。我將我的C/C++和鏈接器命令行參數與MSDN教程的參數相比較。基本上我只是使用Windows運行時組件項目模板,而不是修改任何設置/標誌。我不知道現在如何調試這個問題。 –
我做了一個演示,但無法重現您的問題。你能分享一個可以重現這個問題的基本樣本嗎? –