2015-12-10 2 views
0

У меня есть проект C#, и мне нужен собственный код C++ для взаимодействия с кодом C#. Для этого я использую оболочку класса C++/CLI, которая вызывается классом C++.C++/CLI Родной или управляемый?

Насколько я понимаю, если класс C++ имеет ref за его объявлением, он будет скомпилирован как управляемый код. И если он не имеет его, он будет скомпилирован как собственный код.

Это предположение правильно или мне нужно предоставить компилятору дальнейшие инструкции, чтобы убедиться, что мой класс будет родным кодом?

+0

_ "если класс C++ имеет ссылку ... он будет скомпилирован как управляемый код" _ - Не уверен в этом. C++/CLI 'ref class' может содержать как родные, так и CLI-типы. например «Класс ref», в котором есть указатель 'void *'. http://blogs.msdn.com/b/abhinaba/archive/2012/11/14/c-cli-and-mixed-mode-programming.aspx – MickyD

+0

Кто-нибудь обращает внимание на то, почему -1 голосов? – mFeinstein

+2

Может быть, сердитые кодеры C++, подчеркивающие «Как я могу узнать об исключении из блога? Это не вопрос на C++». В C++ нет такой вещи, как 'ref'. – user4581301

ответ

4

Насколько я понимаю, если класс C++ имеет ref за его объявлением, он будет скомпилирован как управляемый код.

Исправить. ref class типы не могут быть скомпилированы без /clr.

И если у него его нет, он будет скомпилирован как собственный код.

Неверный. Если действует /clr (например, не отключено на #pragma unmanaged), тогда компилятор генерирует только MSIL (промежуточный язык Microsoft, байт-код для .NET).

+0

Но я вызываю библиотеки C++ изнутри ... Я предположил, что если код способен взаимодействовать с родными библиотеками, предполагалось, быть родным ... Итак, я думаю, MSIL обертывает эти вызовы функций? – mFeinstein

+0

_ «Если/clr в действии ... тогда компилятор генерирует только MSIL» _ - вы имеете в виду **/clr: pure **? https://msdn.microsoft.com/en-us/library/k8d11d4s.aspx – MickyD

+0

Самые наивные операции имеют версии MSIL. Не всегда эффективны, но все же функциональны. –

Смежные вопросы