有没有办法在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();
答案 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