Можно ли экспортировать функции из C # DLL, как в VS C ++? - PullRequest
25 голосов
/ 27 января 2011

В VS C / C ++ вы можете использовать extern "C" __declspec(dllexport) -function declaration-.

Как мне сделать это в C # dll?Существует ли код C #, эквивалентный приведенному выше коду?

Редактировать: Подробнее

Я пытаюсь создать надстройку для Notepad ++ и хочу использовать C #, нообычный способ, который я видел до сих пор, - это использовать устаревший код C ++ с приведенным выше вызовом для экспорта нескольких функций, которые Notepad ++ ожидает импортировать и вызывать.Есть пример приложения, использующего C #, но для этого по-прежнему требуется загрузчик DLL, который, как я предполагаю из комментариев / ответов ниже, является единственным способом для C #.

Ответы [ 4 ]

29 голосов
/ 01 августа 2012

Неуправляемый экспорт => https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports

DLLExport => https://github.com/3F/DllExport

Как это работает?

Создайте новую библиотеку классов или перейдите к существующей.Затем добавьте пакет UnmanagedExports Nuget .

Это практически все необходимые настройки.

Теперь вы можете написать любой статический метод, украсив его [DllExport] и используйте его из собственного кода.
Он работает так же, как DllImport, так что вы можете настроить сортировку параметров / результата с помощью MarshalAsAttribute.

Во время компиляции моя задача изменит IL для добавлениятребуется экспорт ...

18 голосов
/ 27 января 2011

Я видел, как люди делали это раньше, но для этого требовался ildasm, добавление директивы MSIL .export, а затем повторная сборка. Программа с именем dll_tool может выполнить эти шаги за вас.

Если вы хотите создать DLL смешанного режима как с собственным, так и с управляемым экспортом, вы должны использовать C ++ / CLI,который специально разработан для этой цели.

8 голосов
/ 13 мая 2014

Да, можно экспортировать функции из DLL C # почти так же, как это делает C ++!Вам нужна небольшая помощь от надстройки Неуправляемый экспорт (DllExport для .Net) , которая облегчает этот процесс, или от аналогичного метода, такого как Экспорт функций из C # / VB.NET в собственный код.

См. Код для экспорта C # DLL в Metatrader Build 600 + для рабочего примера использования шаблона проекта Роберта Гизеке C # для неуправляемого экспорта для экспорта DLL C # в унаследованное приложение (Metatrader), котороеимеет большое сходство с C ++.

Кроме того, вам может показаться интересной Собственная и .NET Interopability , хотя она в основном ориентирована на доступ к собственному коду из .NET, а не наоборот.вокруг.

2 голосов
/ 27 января 2011

Нет, вы не можете сделать это в том же смысле, что и в C и C ++.

Но вы можете создать COM API для достижения того, что затем вы можете использовать в коде C и C ++.

См. Эти статьи

...