Я использую winmdidl.exe и Midlrt.exe для создания файла заголовка компиляции WinRT для консольного приложения. . Я также включил «Winrt/Windows.Foundation.h».
Я попробовал «Как предоставить асинхронные методы в компоненте среды выполнения Windows». Это будет построено, но во время выполнения возникнет ошибка из-за того, что устрашающий (imo) класс не зарегистрирован. Он тоже из 2014 года.
Компонент C# WinRT:
Код: Выделить всё
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Windows.Foundation;
namespace MyComp
{
public sealed class MyLib
{
public static string OtherMethods() // only working method
{
return "string";
}
// Below methods results with `Class not registered` error
public static IAsyncOperation TestAsync() // I think this is the problem
{
return TestAsyncHelper().AsAsyncOperation();
}
private static async Task TestAsyncHelper()
{
// do stuff here
return "string";
}
// ******* Update ****
public static IDictionary GetMapOfNames()
{
Dictionary retval = new Dictionary();
retval.Add(1, "one");
retval.Add(2, "two");
retval.Add(3, "three");
retval.Add(42, "forty-two");
retval.Add(100, "one hundred");
return retval;
}
}
}
Я заметил, что это происходит со всеми типами WinRT, которые не являются примитивными. Я пытаюсь реализовать IList или IDictionary, и ни один из них тоже не работает. Я нашел «Передача управляемых типов в среду выполнения Windows», что приводит к «Возврату управляемых типов из вашего компонента». Но каждая попытка, которую я пробовал, приводила к ошибке «Класс не зарегистрирован». В связанных статьях упоминается, что при передаче типов .Net в компонент WinRT они будут отображаться как соответствующий тип WinRT на другой стороне, и похоже, что он должен просто работать. Я также пытался использовать IMap, но ошибки с IMap недоступны из-за уровня защиты. Я обновил пример кода.
Подробнее здесь: https://stackoverflow.com/questions/695 ... onent-to-c