Подтвердить что ты не робот

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

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

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

Изменить: Подробнее

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

4b9b3361

Ответ 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 и С++.

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