如何在c#控制台(windows窗体)应用程序中使用WinRT组件? 我有一个C++ WRET组件,添加到我的控制台应用程序参考。它编译时没有任何错误,但运行应用程序时会出现以下错误

如何在c#控制台(windows窗体)应用程序中使用WinRT组件? 我有一个C++ WRET组件,添加到我的控制台应用程序参考。它编译时没有任何错误,但运行应用程序时会出现以下错误,c#,windows-runtime,console,C#,Windows Runtime,Console,中发生类型为“System.TypeLoadException”的未处理异常 mscorlib.dll 其他信息:找不到Windows运行时类型 “ProcessorInfoComponent.ProcessorInfoProvider”。 这是我的代码: .h文件: #pragma once namespace ProcessorInfoComponent { public ref class ProcessorInfoProvider sealed { public:

中发生类型为“System.TypeLoadException”的未处理异常 mscorlib.dll

其他信息:找不到Windows运行时类型 “ProcessorInfoComponent.ProcessorInfoProvider”。

这是我的代码:

.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

此WinRT在windows phone和WPF应用程序中运行良好,但在windows窗体和控制台应用程序中不起作用。
谢谢。

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

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

此外,它正确编译的原因是因为C#编译和运行程序的方式。C编译器将代码编译成
模块
,然后再编译成
汇编
,其中包含一种
中间语言
和一些
元数据
。简而言之,程序编译时没有语法错误,但在执行行
var processorinfo provider=new processorinfo component.processorinfo provider()时遇到运行时错误

有关WinRT如何工作的更多信息,请访问网站。 或者在网站上获取关于C#编译器的更多信息

希望这有帮助

    static void Main(string[] args)

    {

        var processorInfoProvider = new ProcessorInfoComponent.ProcessorInfoProvider();

        var isNeonSupported = processorInfoProvider.IsNeonSupported();

        Console.WriteLine(isNeonSupported);

    }