web-dev-qa-db-ja.com

Linuxを使用した.netコアでのP-Invoke

Linuxの.NETCoreにP/Invoke (dllimport)を実装する方法はありますか?

例:

.netフレームワークでコンパイルされたC++ MyLib.dllがあります。

このように使用できる場合、または.net-coreを使用してLinuxでネイティブwin apiを呼び出すことがサポートされていない場合は?

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

PInvokeは確かにサポートされていますが(OSとインターフェイスするすべてのコードがどのように機能するか)、リストした特定のケースではサポートされていません。 Linux用に関数互換バージョンを自分で作成していない限り、Linuxでwin32バイナリにPInvokeすることはできません。より現実的には、同様の機能を公開する他のシステムバイナリからLinux関数を見つけて、代わりにそれを使用する必要があります。

16
Eric Mellino

DllはWindowsOSにのみ存在しますが、.NETCoreのPInvokeを使用して一部のLinuxAPIをインポートして使用できます。

サンプル:

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

参照してください https://developers.redhat.com/blog/2016/09/14/pinvoke-in-net-core-rhel/

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

8