Come esportare C # i metodi?
-
21-09-2019 - |
Domanda
Come possiamo esportare C # i metodi?
ho una dll e voglio usare i suoi metodi nel linguaggio Python con il modulo ctypes. Perché ho bisogno di usare il modulo ctypes, ho bisogno di esportare i metodi C # per loro di essere visibili in Python.
Quindi, come posso esportare i metodi C # (come fanno in C ++)?
Soluzione
Contrariamente alla credenza popolare, questa è possibile.
Vedere qui .
Altri suggerimenti
Con la normale applicazione Python ( "CPython"), non è possibile, almeno non direttamente.
Si potrebbe scrivere wrapper C nativi intorno alle nostre C # utilizzando metodi C ++ / CLI , e chiamare questi involucri da Python.
In alternativa, si potrebbe provare a IronPython . Questo consente di eseguire codice Python e chiamare il codice in qualsiasi linguaggio .NET, tra cui C #.
Non è possibile. Se avete bisogno di esportazioni DLL è necessario usare il linguaggio C ++ / CLI. Ad esempio:
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);
}
La classe può essere scritto in C # pure. Il compilatore C ++ / CLI emette un thunk speciale per l'esportazione che assicura che il CLR viene caricato e l'esecuzione passa alla modalità gestita. Questo non è esattamente veloce.
Scrittura [ComVisible (true)] il codice in C # è un'altra possibilità.
(Questo potrebbe non essere più rilevante in quanto SLaks ha trovato che puntano ingegnoso, ma lascio una versione modificata per riferimento ...)
Il modo "normale" di esporre .NET / C # oggetti di codice non gestito (come Python) è quello di creare un wrapper COM-callable per il C # DLL (assembly .NET), e chiamare che utilizzando il supporto COM / OLE di Python. Per creare il wrapper COM-callable, utilizzare le utilità della riga di comando tlbexp
e / o regasm
.
Ovviamente, però, questo non fornisce le API / DLL in stile C che puntano SLaks' fa.