我們如何導出C#方法?如何導出C#方法?
我有一個DLL,我想在ctypes模塊的Python語言中使用它的方法。 因爲我需要使用ctypes模塊,所以我需要導出C#方法以使它們在Python中可見。因此,如何導出C#方法(就像他們在C++中那樣)?
我們如何導出C#方法?如何導出C#方法?
我有一個DLL,我想在ctypes模塊的Python語言中使用它的方法。 因爲我需要使用ctypes模塊,所以我需要導出C#方法以使它們在Python中可見。因此,如何導出C#方法(就像他們在C++中那樣)?
與流行的看法相反,這個是可能的。
見here。
我用dllexp.exe查看模板創建的C#dll導出的方法,它沒有發生該方法..有沒有辦法讓C#dll方法在像dllexp.exe這樣的程序中在外部可見? – 2010-01-18 11:51:28
tks爲答案;) – 2010-01-19 22:25:23
使用正常的Python實現(「CPython」),您不能,至少不能直接。
您可以使用C++/CLI在我們的C#方法中編寫原生C封裝,並從Python中調用這些封裝。您可以嘗試IronPython。這使您可以運行Python代碼並以任何.Net語言調用代碼,包括C#。
我想使用Python本身,而不是像IronPython這樣的額外實現。 – 2010-01-17 19:05:42
(這可能不再是因爲SLaks有關發現巧妙的聯繫,但我會離開一個參考編輯的版本...)
暴露.NET/C#對象的「正常」的方式非託管代碼(如Python)是爲C#DLL(.NET程序集)創建一個COM可調用的包裝器,並使用Python的COM/OLE支持調用該包裝器。要創建COM-callable包裝器,請使用tlbexp
和/或regasm
命令行實用程序。
然而,顯然,這並沒有提供SLaks鏈接所做的C/DLL風格的API。
其實,這是可能的。看到我的答案。 – SLaks 2010-01-17 19:01:58
這是不可能的。如果你需要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)]代碼是另一種可能性。
其實,這是可能的。看到我的答案。 – SLaks 2010-01-17 19:13:47
呃,文章和可下載的源代碼都不能解釋它是如何工作的。我會等待OP的確認。 – 2010-01-17 21:19:16
我不得不建立一個包裝C++ dll(c#dll的)來正確使用ctypes模塊! – 2011-07-28 08:50:11
爲什麼不使用IronPython? – 2010-01-17 19:06:12
教授的「訂單」 – 2010-01-17 21:17:40
python.net允許使用Python C-API和.NET Pinvoke和Unmanaged Exports在Python和.NET之間進行雙向互操作,如下所述。所以所有的硬件都是爲你寫的! http://pythonnet.github.io/ – denfromufa 2016-09-08 04:29:12