.Net - Может ли библиотека классов (dll), написанная на .Net, использоваться приложением, написанным на C или C ++? - PullRequest
3 голосов
/ 28 августа 2009

Допустим, я написал библиотеку классов (dll) в .Net, и теперь у меня есть разработчики, использующие ее в своих приложениях .Net.

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

Если нет, то почему? Может быть, я должен добавить определенный код, чтобы сделать его доступным для нативных кодеров?

Спасибо.

РЕДАКТИРОВАТЬ : В случае, если кто-то еще заинтересован в этой проблеме, я нашел эту статью из Google Книг, в которой содержится введение в использование Net.classes из COM.

Ответы [ 3 ]

10 голосов
/ 28 августа 2009

Единственный способ представить сборку .NET вне языка, основанного на CLR, - это COM Interop. Вы ничего не можете сделать, чтобы ссылаться на .NET .dll напрямую на неуправляемом языке.

Причина этого заключается в том, что используемое расширение файла .dll предназначено исключительно для внешнего вида и иллюзии согласованности. Файлы .dll, сгенерированные .NET, не содержат машинного кода, они содержат IL (промежуточный язык), который компилируется во время выполнения (называется компиляцией Just-In-Time или JIT). Код не компилируется во время помещения в файл .dll. В результате неуправляемый язык не выполняет ничего.

COM-взаимодействие позволяет CLR загружать .dll, выполнять эту JIT-компиляцию и использовать систему COM для обработки связи между собственным кодом и .NET .dll.

1 голос
/ 28 августа 2009

Я должен не согласиться с Адамом Робинсоном. Его описание, особенно комментарий, объясняющий COM-выставленное свойство, безусловно, является одним из способов его реализации. В другом случае приложение C или C ++ может размещать Microsoft CLR и запускать .Net DLL. Возможно, вы также сможете разместить Mono, он должен быть в равной степени способен запускать чистые .Net DLL. (т.е. нет трюков P / Invoke)

0 голосов
/ 14 июля 2011

Если вы можете согласиться на меньшее, чем полноценный класс C ++, и вам не нравятся обертки COM, затем используйте это решение или это , которое позволяет вам предоставлять статические методы как экспорт функций или простые структуры C # как структуры C ++. Для этого требуется Visual Studio, но она не поддерживается Microsoft, поэтому вы используете ее на свой страх и риск. Я могу засвидетельствовать, что это работало на меня. Другой способ - использовать mono и CXXI ​​, как описано de Icaza в его блоге.

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