如何在c#console(windows form)app中使用WinRT组件?

时间:2016-02-16 06:38:31

标签: c# windows-runtime console

我有一个c ++ WinRT组件,添加到我的控制台应用程序参考中。它编译时没有任何错误,但在运行应用程序时会出现以下错误

  

发生了'System.TypeLoadException'类型的未处理异常   mscorlib.dll中

     

其他信息:找不到Windows运行时类型   'ProcessorInfoComponent.ProcessorInfoProvider'。   my error

这是我的代码:

.h文件:

#pragma once

namespace ProcessorInfoComponent
{
public ref class ProcessorInfoProvider sealed
{
   public:
      bool IsNeonSupported();
};
}

.cpp文件:

#include "pch.h"
#include "ProcessorInfoComponent.h"
using namespace ProcessorInfoComponent;

bool ProcessorInfoProvider::IsNeonSupported()
{
     return IsProcessorFeaturePresent(PF_ARM_VFP_32_REGISTERS_AVAILABLE);
}

在c#中使用是: 的.cs

    static void Main(string[] args)

    {

        var processorInfoProvider = new ProcessorInfoComponent.ProcessorInfoProvider();

        var isNeonSupported = processorInfoProvider.IsNeonSupported();

        Console.WriteLine(isNeonSupported);

    }

这个WinRT在Windows手机和WPF APP中工作得很好但在Windows窗体和控制台应用程序中无法正常工作。 感谢。

1 个答案:

答案 0 :(得分:0)

为了将来参考,您应该在TypeLoadException的MSDN页面上阅读,并且应该在发生错误的地方放置一个try...catch(Exception ex)并查看ex.message,通常是好的捕捉可能发生的任何错误的方法。

就你所遇到的错误而言,我很确定你无法混合WinRT和WinForms / Console apss,因为它们以不同的方式执行而WinRT是有限的,这意味着它不包括.Net框架因此无法使用WinForms中使用的许多函数。

此外,它正确编译的原因是因为C#编译和运行程序的方式。 C#编译器将代码编译为Module,然后编译为assembly,其中包含Intermediate Language和一些Metadata。简而言之,程序编译是因为没有语法错误,但在执行行var processorInfoProvider = new ProcessorInfoComponent.ProcessorInfoProvider();时遇到运行时错误。

查看this网站,了解有关WinRT如何运作的更多信息。 或this网站获取有关C#编译器的更多信息。

希望这有帮助。