How to export C# methods?

前端 未结 4 1913
醉酒成梦
醉酒成梦 2020-11-30 09:05

How can we export C# methods?

I have a dll and I want to use its methods in the Python language with the ctypes module. Because I need to use the ctypes module, I ne

相关标签:
4条回答
  • 2020-11-30 09:29

    Contrary to popular belief, this is possible.
    See here.

    0 讨论(0)
  • 2020-11-30 09:36

    With the normal Python implementation ("CPython"), you can't, at least not directly.

    You could write native C wrappers around our C# methods using C++/CLI, and call these wrappers from Python.

    Or, you could try IronPython. This lets you run Python code and call code in any .Net language, including C#.

    0 讨论(0)
  • 2020-11-30 09:40

    That's not possible. If you need DLL exports you'll need to use the C++/CLI language. For example:

    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);
    }
    

    The class can be written in C# as well. The C++/CLI compiler emits a special thunk for the export that ensures that the CLR is loaded and execution switches to managed mode. This is not exactly fast.

    Writing [ComVisible(true)] code in C# is another possibility.

    0 讨论(0)
  • 2020-11-30 09:48

    (This may no longer be relevant since SLaks has found that ingenious link, but I'll leave an edited version for reference...)

    The "normal" way of exposing .NET/C# objects to unmanaged code (like Python) is to create a COM-callable wrapper for the C# DLL (.NET assembly), and call that using Python's COM/OLE support. To create the COM-callable wrapper, use the tlbexp and/or regasm command-line utilities.

    Obviously, however, this does not provide the C/DLL-style API that SLaks' link does.

    0 讨论(0)
提交回复
热议问题