2016-07-05 32 views
6

È possibile implementare P/Invoke (dllimport) in .NET Core su Linux?P-Invoke in .net core con Linux

Esempio:

ho C++ MyLib.dll compilato con il framework .NET.

Se è possibile utilizzare in questo modo o non è il supporto per chiamare nativo win api con linux utilizzando .net-core?

[DllImport("MyLib.dll", CallingConvention = CallingConvention.StdCall)] 
internal static extern long NativeMethod(); 
+2

Avete provato? Come ha fallito? – svick

+0

Un sacco di PInvoke è stato utilizzato da Microsoft per sviluppare .NET Core stesso, quindi sono così sorpreso che hai chiesto. –

risposta

11

PInvoke è certamente sostenuto (è così che tutto il codice che si interfaccia con le opere del sistema operativo), ma non nel caso specifico avete elencato. Non puoi eseguire PInvoke su un binario win32 su Linux, a meno che tu non abbia in qualche modo costruito una versione compatibile con la funzione di esso per Linux. Più realisticamente, devi trovare una funzione Linux da un altro binario di sistema che espone funzionalità simili, e poi usarla.

5

Anche le DLL esistono solo nel sistema operativo Windows, è possibile importare e utilizzare alcune API di Linux utilizzando PInvoke in .NET Core.

Campioni:

[DllImport("libc")] 
static extern int read(int handle, byte[] buf, int n); 

[DllImport("libc.so.6")] 
private static extern int getpid(); 

[DllImport("libgtk-x11-2.0.so.0")] 
static extern IntPtr gtk_message_dialog_new(IntPtr parent_window, DialogFlags flags, MessageType type, ButtonsType bt, string msg, IntPtr args); 

Si prega di consultare https://developers.redhat.com/blog/2016/09/14/pinvoke-in-net-core-rhel/

https://gist.github.com/martinwoodward/f5b195aa53b4ed52cabaf701486baa79