Visual Studio 2015 — приложение UWP C #, вызывающее компонент среды выполнения Windows, написанный в переполнении стека

Я пытаюсь создать Среда выполнения Windows (WinRT) Компонент, написанный на C ++ (c ++ — cx), который можно вызвать из моего приложения UWP C #. Я следил за этим MSDN Учебник

Все прошло нормально. Я умею строить & запустите код / ​​образец, указанный в приведенной выше ссылке на обоих Windows-10 Desktop & мобильный

Затем я попытался создать еще более простой компонент 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;
}

Я использую те же имена классов (Class1.h & Class1.cpp), который обеспечивает VS-2015, когда я создаю новый проект WinRT.

Вот как я вызываю класс 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), происходит сбой со следующей ошибкой:

Возникло исключение: System.IO.FileNotFoundException в CS_WRT_sample.exe

Указанный модуль не может быть найден. (Исключение из 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.
Любая помощь будет высоко оценена.

1

Решение

Вы столкнетесь с этим, если будете использовать прямую ссылку на winmd в C ++ вместо ссылки P2P. Это легко проверить в вашем .csproj:

Например, ваш .csproj не должен иметь эту строку: .. \ Debug \ Abc_def \ Abc_Def.winmd

Вместо этого рассмотрите возможность использования чего-то вроде:

{1ee77824-eaa8-40f1-9b56-6f8ffa44e727}
Abc_Def

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]