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

时间:2016-07-05 11:14:19

标签: pinvoke .net-core

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

示例:

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

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

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

2 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分: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);

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

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