Разработка управляемой библиотеки DLL (C ++ / CLI) для статической библиотеки - PullRequest
2 голосов
/ 21 октября 2011

Я работаю с C ++ / CLI для библиотеки C. Я исследовал в сети об этом. Я получил несколько ссылок об этом.

Особенности производительности C ++ / CLI в смешанном режиме - лучшие практики

Я занимаюсь разработкой C ++ / CLI DLL, которая обернет статическую библиотеку C.

Было одно предложение, которое я действительно хотел обсудить здесь: «Не следует смешивать управляемый и неуправляемый код C ++ в оболочке». Я не понимаю смысла этого.

Управляемая DLL, разумеется, будет содержать управляемый код C ++ и неуправляемый код C ++.

Назначение оболочки - переводить вызовы из статической библиотеки в DLL управляемого кода.

Пожалуйста, проясните мои сомнения - я хотел прокомментировать это.

1 Ответ

2 голосов
/ 21 октября 2011

Если у вас есть обычная библиотека C ++ (не-CLI), вам следует избегать включения опции компиляции 'CLI' для этой библиотеки по соображениям производительности.

Вместо этого рекомендуется создать библиотеку, в которой есть только классы-обертки. Эта библиотека, конечно, будет C ++ / CLI и создаст сборку, на которую могут ссылаться обычные библиотеки .Net.

Так что это, вероятно, то, о чем говорил совет - создайте библиотеку оболочки для ваших оболочек CLI

- дополнение к обновленному вопросу

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

Например, класс C ++ / CLI не может иметь никаких неуправляемых переменных-членов, которые не являются ссылками или указателями. Это связано с тем, что сборщик мусора во время выполнения .Net может решить в любой момент поместить объект в другое место в памяти (по этой причине вам нужно закрепить память и т. Д.). Если GC решит переместить ваши собственные объекты C ++ в какое-то другое место в памяти, это потенциально лишит законной силы любые указатели, которые у вас есть на этот объект. Это явно плохо.

C ++ / CLI - отличный язык. Однако, если вы используете его, вам следует либо написать чистый код .Net, либо использовать его как интерфейс между собственным C ++ и .Net. Смешивание моделей памяти в одном классе просто сбивает с толку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...