簡體   English   中英

結合C#和C ++項目適用於x86和x64,但不適用於ARM

[英]Combining a C# and C++ project works for x86 and x64 but not for ARM

我的解決方案中有兩個項目。 一個是C#Universal Application,另一個是C ++項目(從這里獲得)並重新定位到Windows 8.1(這是我導入項目時由Visual Studio 15執行的)。 我從C#項目中引用了C ++項目,並將Copy Local設置為true。

代碼構建完全適用於所有三個平台(x86,x64和ARM)。 但是,當部署到ARM設備時,我嘗試訪問C ++代碼的行上會拋出異常。 在x86和x64版本上,這不是問題,代碼工作得很好。 例外是System.IO.FileNotFoundException這里是詳細的異常的pastebin

我對這個例外的理解是生成的.dll由於某種原因沒有被復制到設備上? 我已經看過配置設置,據我所知,所有內容似乎都設置正確(截圖見下文)。 另一種可能性是C ++項目對另一個類具有內部依賴性,我需要從某個地方識別和引用它。 stacktrace中有一行(包含在上面的pastebin鏈接中)表明它出現在System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD)

C ++代碼使用Media Foundation WinRT組件,並且應該在ARM設備上完美運行。

似乎關於SO的其他問題(例如此處 )也對此進行了研究,但僅針對一個特定平台,例如x86。

有什么特別的原因可以解決為什么它目前適用於x86和x64而不適用於ARM?

截圖:

在此輸入圖像描述

在此輸入圖像描述

並重新定位到Windows 8.1

這就是你的問題。 如果您以Windows 10設備為目標,則需要創建新的Windows運行時組件(通用Windows):

通用Windows(10)C ++ Windows運行時組件

我的猜測是Windows 8.1 Winmd與您選擇的設備不兼容。

我已經下載了VideoRecorder工具,並重現了您的問題。 然后,如果我創建一個新的Winmd Universal Windows,在其中添加C ++文件,它在帶有Windows 10 IoT的Raspberry Pi 2上運行時沒有問題。

編輯:如果您的目標是Windows 8.1設備而不是Windows 10設備,那么您需要通用Windows 8.1項目:

通用Windows 8.1 C ++ Windows運行時組件

我已經制作了一個樣本並將其部署在諾基亞Lumia 925上,沒有任何問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM