1

我想創建一個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教程中提到的相同步驟。 任何幫助將不勝感激。

+0

我在我的機器上試了一下效果很好本地機和x86模擬器,是有你沒有任何特殊的步驟? – 2power10

+0

Hi @ 2power10,謝謝你的迴應。這很奇怪。我將我的項目複製到我朋友的機器上,並在他的機器上運行。他也看到了同樣的行爲。不,我沒有做任何特別的事情。正如我所提到的,我遵循了與MSDN教程中列出的步驟相同的步驟。我將我的C/C++和鏈接器命令行參數與MSDN教程的參數相比較。基本上我只是使用Windows運行時組件項目模板,而不是修改任何設置/標誌。我不知道現在如何調試這個問題。 –

+0

我做了一個演示,但無法重現您的問題。你能分享一個可以重現這個問題的基本樣本嗎? –

回答

1

如果您使用直接引用C++ winmd而不是P2P引用,則會遇到此問題。這是很容易在你的.csproj檢查:

例如,您的.csproj不應該有這樣一行: .. \調試\ Abc_def \ Abc_Def.winmd

相反,考慮使用的東西像: {1ee77824-eaa8-40f1-9b56-6f8ffa44e727} Abc_Def

相關問題