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