使用Linux在.net核心中调用P-Invoke

Els*_*han 11 pinvoke .net-core

有没有办法(dllimport)在Linux上的.NET Core中实现P/Invoke ?

示例:

我用.net框架编译了C++ MyLib.dll.

如果可以这样使用,或者不支持使用.net-core使用linux调用native win api?

[DllImport("MyLib.dll", CallingConvention = CallingConvention.StdCall)]
internal static extern long NativeMethod();
Run Code Online (Sandbox Code Playgroud)

Eri*_*ino 16

当然支持PInvoke(这是与操作系统接口的所有代码的工作方式),但不是您列出的特定情况.你不能在Linux上PInvoke到win32二进制文件,除非你自己为Linux自己构建了一个与函数兼容的版本.更现实的是,您需要从其他系统二进制文件中找到一个Linux函数,该函数会公开类似的功能,然后再使用它.


小智 8

即使dll仅存在于Windows操作系统中,您也可以使用.NET Core中的PInvoke导入和使用一些Linux API.

样品:

[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);
Run Code Online (Sandbox Code Playgroud)

请参阅https://developers.redhat.com/blog/2016/09/14/pinvoke-in-net-core-rhel/

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