C++ CLI правильный способ использования #pragma managed / unmanaged

Я пишу приложение C++ / CLI, но я хочу, чтобы большая часть кода в моей DLL C++ запускалась изначально (т. е. не управлялась).

У меня есть только один класс CLI в модуле, другие файлы-все родные C++.

Итак, каков наилучший способ обеспечения запуска этих собственных классов... Ну, изначально?

Я:

  • A) добавьте #pragma unmanaged в начало каждого собственного класса
  • B) просто добавьте #pragma unmanaged перед включениями в мой одиночный класс CLI
  • C) что-то еще?

спасибо

2 ответов


вам не нужно прыгать через обручи, чтобы обеспечить это. Компилятор будет только когда-либо испускать IL, когда он компилирует вашу программу с включенной опцией /clr. Это выглядит как вариант проекта, но это не так.

просто выберите .cpp файлы, содержащие машинный код. Выберите несколько из них, удерживая нажатой клавишу Ctrl и щелкнув файл в окне Проводника. Щелкните правой кнопкой мыши + Properties, C / C++, General. Измените параметр "поддержка Общеязыковой среды выполнения" "нет...".


обычный способ сделать это-поместить собственный код в проект статической библиотеки без поддержки .NET (компиляция без /clr). Вы можете отключить /clr для отдельных файлов в проекте C++/CLI, но затем предварительно скомпилированные заголовки действительно путаются. Используя отдельный проект библиотеки, легко иметь собственный pch для собственного кода и управляемый pch для управляемого кода.

затем я связываю свой код C++/CLI с этим родным C++ .lib для создания DLL. Все, что вы делаете, это устанавливаете зависимость от проекта и Visual Studio заботятся об остальном.

вы также можете использовать #pragma managed(push, off) и #pragma managed(pop) Если вам абсолютно необходимо объединить собственный и управляемый код в одном блоке компиляции. Но обычно любой код, который находится в заголовочных файлах, существует, потому что вы собираетесь его встроить... это означает, что он должен быть в управляемом режиме при включении в управляемый CU, поэтому он может быть встроен в управляемые функции.


несмотря на его комментарии, злословящие этот ответ, Ганс начал рекомендовать свой подход.