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, поэтому он может быть встроен в управляемые функции.
несмотря на его комментарии, злословящие этот ответ, Ганс начал рекомендовать свой подход.