Как экспортировать методы С#?

Как мы можем экспортировать методы С#?

У меня есть dll, и я хочу использовать его методы на языке Python с модулем ctypes. Поскольку мне нужно использовать модуль ctypes, мне нужно экспортировать методы С#, чтобы они были видимыми в Python.

Итак, как я могу экспортировать методы С# (например, они есть на С++)?

Ответы

Ответ 1

Вопреки распространенному мнению, это возможно.
См. здесь.

Ответ 2

С обычной реализацией Python ( "CPython" ) вы не можете, по крайней мере, не напрямую.

Вы можете написать собственные оболочки C вокруг наших методов С#, используя С++/CLI и вызывать эти обертки из Python.

Или вы можете попробовать IronPython. Это позволяет запускать код Python и код вызова на любом языке .Net, включая С#.

Ответ 3

(Это может быть уже не актуально, поскольку SLaks нашел эту гениальную ссылку, но я останусь отредактированной версией для справки...)

"Обычный" способ подвергать объекты .NET/С# неуправляемому коду (например, Python) - создавать COM-вызываемую оболочку для С# DLL (сборка .NET) и вызывать ее с помощью поддержки Python COM/OLE. Чтобы создать COM-вызываемую оболочку, используйте утилиты командной строки tlbexp и/или regasm.

Очевидно, однако, это не обеспечивает API-интерфейс типа C/DLL, который имеет ссылка SLaks.

Ответ 4

Это невозможно. Если вам нужен экспорт DLL, вам нужно будет использовать язык С++/CLI. Например:

public ref class Class1 {
public:
  static int add(int a, int b) {
      return a + b;
  }
};

extern "C" __declspec(dllexport) 
int add(int a, int b) {
  return Class1::add(a, b);
}

Класс также может быть записан на С#. Компилятор С++/CLI выделяет специальный поток для экспорта, который обеспечивает загрузку CLR и выполнение переключается в управляемый режим. Это не так быстро.

Ввод кода [ComVisible (true)] в С# - это еще одна возможность.