Можно ли экспортировать функции из библиотеки DLL C#, как в VS C++?

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

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

Edit: дополнительная информация

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

4 ответов


Неуправляемый Exports
https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports

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

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

Это почти вся настройка, которая требуется.

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

во время компиляции моя задача изменит IL, чтобы добавить необходимый экспорт...


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

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


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

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

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


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

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

посмотреть эти статьи