簡體   English   中英

如何導出C#方法?

[英]How to export C# methods?

我們如何導出C#方法?

我有一個DLL,我想在Python語言中使用它的方法和ctypes模塊。 因為我需要使用ctypes模塊,所以我需要導出C#方法,使它們在Python中可見。

那么,我如何導出C#方法(就像在C ++中一樣)?

與流行的看法相反,這可能的。
看到這里

使用普通的Python實現(“CPython”),你不能,至少不能直接。

您可以使用C ++ / CLI圍繞我們的C#方法編寫本機C包裝器,並從Python調用這些包裝器。

或者,您可以嘗試IronPython 這使您可以運行Python代碼並以任何.Net語言調用代碼,包括C#。

(這可能不再具有相關性,因為SLaks發現了這個巧妙的鏈接,但我會留下一個編輯版本供參考......)

將.NET / C#對象暴露給非托管代碼(如Python)的“常規”方法是為C#DLL(.NET程序集)創建一個COM可調用包裝器,並使用Python的COM / OLE支持調用它。 要創建COM可調用包裝器,請使用tlbexp和/或regasm命令行實用程序。

但是,顯然,這並沒有提供SLaks鏈接所做的C / DLL風格的API。

那是不可能的。 如果需要DLL導出,則需要使用C ++ / 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);
}

該類也可以用C#編寫。 C ++ / CLI編譯器為導出發出特殊的thunk,以確保加載CLR並執行切換到托管模式。 這不是很快。

在C#中編寫[ComVisible(true)]代碼是另一種可能性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM