2015-04-09 16 views
6

Ho una base di codice che utilizza un progetto C++/CLI che espone le classi C++ al CLR tramite classi wrapper sottili. Per esempio ...Gli assembly in modalità mista (progetti C++/CLI) funzionano su .NET Core?

codice

C++ in un progetto C++

class Foo { 
    public Foo(bool wat) { /* do the things */ } 
}; 

codice C++/CLI in un complesso modalità mista (++/progetto CLI C)

public ref class ManagedFoo { 
    Foo * foo; 
public: 
    ManagedFoo (bool wat) { foo = new Foo(wat); } 
    !ManagedFoo() { delete foo; } 
    ~ManagedFoo() { this->!ManagedFoo(); } 
}; 

Come per quanto ne so, gli assembly in modalità mista funzioneranno praticamente solo su Windows .NET. Spero di non avere bisogno di ridimensionare i componenti e utilizzare P/Invoke, che mi darebbe il supporto multipiattaforma.

Qualcuno sa se .NET Core supporterà gli assembly in modalità mista? Altre idee sono benvenute.

+3

No, CoreCLR non supporta gli inizializzatori del modulo. Non ha nemmeno senso, un compilatore C++/CLI è disponibile solo per Windows e non è open source. –

risposta

4

Il codice non gestito nel contesto di C++/CLI è sempre specifico della piattaforma ed è compilato per un sistema operativo specifico (Windows) e un'architettura CPU specifica (x86/x64). Il codice non gestito in C++/CLI finisce per essere molto simile al codice C++ reale compilato usando un compilatore C++. Poiché gli assembly in modalità mista possono contenere codice nativo, sono associati a un'architettura OS e CPU specifica.

+0

In pratica, sono sicuro che questo è per lo più corretto (specialmente quando il codice nativo usa il runtime C (++) o la libreria standard), ma che dire della cross-compilation? È qualcosa che MSVC++ non è in grado di fare? – stakx

Problemi correlati