我有一个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窗体和控制台应用程序中无法正常工作。 感谢。
答案 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#编译器的更多信息。
希望这有帮助。