Можно ли экспортировать функции из С# DLL, как в VS С++?
В VS C/С++ вы можете использовать extern "C" __declspec(dllexport) -function declaration-
.
Как это сделать в С# dll? Есть ли код С#, эквивалентный приведенному выше коду?
Изменить: Подробнее
Я пытаюсь создать добавление для Notepad ++, и я хочу использовать С#, но общий способ, который я видел до сих пор, - использовать устаревший код С++ с вышеупомянутым вызовом для экспорта нескольких функций, которые Notepad ++ ожидает для импорта и вызова. Существует пример приложения, использующего С#, но для этого все еще требуется DLL загрузчика, который, как я полагаю, из комментариев/ответов ниже является единственным способом для С#.
Ответы
Ответ 1
Неуправляемый экспорт
https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports
Как это работает?
Создайте новую библиотеку классов или перейдите к существующей. Затем добавьте UnmanagedExports пакет Nuget.
Это почти вся настройка, которая требуется.
Теперь вы можете написать любой статический метод, украсить его [DllExport]
и использовать его из собственного кода.
Он работает так же, как DllImport, поэтому вы можете настроить сортировку параметров/результата с помощью MarshalAsAttribute
.
Во время компиляции моя задача изменит IL, чтобы добавить требуемый экспорт...
Ответ 2
Я видел, как люди это делали раньше, но это требовало ildasm, добавляя директиву MSIL .export
, а затем снова собирать. Программа с именем dll_tool
может выполнить следующие действия для вас.
Если вы хотите создать DLL с смешанным режимом с использованием как собственного, так и управляемого экспорта, вы должны использовать С++/CLI, специально разработанный для этой цели.
Ответ 3
Да, можно экспортировать функции из С# dll во многом так же, как это делает С++! Вам нужна небольшая помощь от надстройки Unmanaged Exports (DllExport for.Net), которая облегчает этот процесс или аналогичный метод, например Экспорт функций в С#/VB.NET в собственный код.
См. Код для экспорта С# DLL в Metatrader Build 600+ для рабочего примера с использованием шаблона проекта Robert Giesecke С# для неуправляемого экспорта для экспорта С# dll для устаревшего приложения (Metatrader), которое имеет большое сходство с С++.
Кроме того, вы можете найти Native и .NET Interopability, хотя он в основном предназначен для доступа к собственному коду из .NET, а не к другому вокруг.
Ответ 4
Нет, вы не можете сделать это в том же смысле, что и в C и С++.
Но вы можете создать COM API для достижения того, что вы можете использовать в коде C и С++.
См. эти статьи