2016-02-16 23 views
6

Ho un componente WinRT C++, aggiunto al riferimento della mia console. Compila senza alcun errore, ma durante l'esecuzione di app seguente erroreCome utilizzare un componente WinRT nell'app della console C# (Windows form)?

un'eccezione non gestita di tipo 'System.TypeLoadException' si è verificato in mscorlib.dll

Ulteriori informazioni: Impossibile trovare il tipo di Windows Runtime ' ProcessorInfoComponent.ProcessorInfoProvider'. my error

Questo è il mio codice:

file h:

#pragma once 

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

file cpp:

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

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

e l'utilizzo in C# è: cs

static void Main(string[] args) 

    { 

     var processorInfoProvider = new ProcessorInfoComponent.ProcessorInfoProvider(); 

     var isNeonSupported = processorInfoProvider.IsNeonSupported(); 

     Console.WriteLine(isNeonSupported); 

    } 

questo WinRT funziona molto bene con Windows Phone e WPF APP ma in Windows form e console non funziona. grazie.

risposta

0

Per riferimento futuro, si dovrebbe leggere sulla pagina di MSDN per TypeLoadException e si dovrebbe mettere un try...catch(Exception ex) intorno dove l'errore è in corso e guardare il ex.message, in genere un buon modo per catturare eventuali errori che potrebbero essere in corso.

In termini dell'errore che si sta avendo, sono abbastanza sicuro che non si riescano a combinare WinRT e WinForms/Console apss poiché vengono eseguiti in modi diversi e WinRT è limitato, il che significa che non include. Net Framework quindi non può utilizzare molte delle funzioni utilizzate in WinForms.

Inoltre, il motivo per cui viene compilato correttamente dipende dal modo in cui C# compila ed esegue i programmi. Il compilatore C# compila il codice in Module e quindi in assembly che contiene uno Intermediate Language e un altro Metadata. In breve, il programma viene compilato a causa di errori di sintassi ma rileva un errore di runtime durante l'esecuzione della riga var processorInfoProvider = new ProcessorInfoComponent.ProcessorInfoProvider();.

Visita il sito Web this per ulteriori informazioni su come funziona WinRT. o il sito Web this per ulteriori informazioni sul compilatore C#.

Spero che questo aiuti.