我尝试在我的C#应用程序中使用一些WinRT函数(一个普通的Windows程序而不是通用应用程序),正常的方法在我的情况下不起作用。如上所述:http://www.codeproject.com/Articles/457335/How-to-call-WinRT-APIs-from-NET-desktop-apps
所以我想通过P / Invoke调用WinRT API。我发现了很多关于另一种方式的问题(在WinRT中使用P / Invore)。
所以我的问题是否有人知道通过P / Invoke调用WinRt函数的方法?
谢谢, 丹尼尔
- 编辑 -
要完成我的问题,这是代码,它不起作用:
Task.Factory.StartNew(async () =>
{
// Check Microsoft Passport is setup and available on this machine
if (await MicrosoftPassportHelper.MicrosoftPassportAvailableCheckAsync())
{
Console.WriteLine("Microsoft Passport is setup!");
}
else
{
// Microsoft Passport is not setup so inform the user
Console.WriteLine(("Microsoft Passport is not setup!\r\n" +
"Please go to Windows Settings and set up a PIN to use it.");
}
});
public static async Task<bool> MicrosoftPassportAvailableCheckAsync()
{
var keyCredentialAvailable = KeyCredentialManager.IsSupportedAsync();
if (keyCredentialAvailable.GetResults() == false)
{
// Key credential is not enabled yet as user
// needs to connect to a Microsoft Account and select a PIN in the connecting flow.
Debug.WriteLine("Microsoft Passport is not setup!\nPlease go to Windows Settings and set up a PIN to use it.");
return false;
}
return true;
}
我从Line&#34获得了ArgumentException; if(keyCredentialAvailable.GetResults()== false)&#34;。
价值不在预期范围内。 在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 在PassportTest.MicrosoftPassportHelper.d__0.MoveNext()
正如我发现的那样,这是因为KeyCredentialManager不支持Universial Apps。这就是为什么我要检查p / invoke可能是一个选项。