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



这是我的代码:

.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 Phone和WPF APP中运行良好,但在Windows窗体和控制台应用程序中不起作用。
谢谢。

最佳答案

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

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

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

请访问this网站,以获取有关WinRT工作原理的更多信息。
this网站获取有关C#编译器的更多信息。

希望这可以帮助。

关于c# - 如何在C#控制台(Windows窗体)应用程序中使用WinRT组件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35425449/

10-13 03:14