2016-07-05 16 views
6

Linuxの.NET CoreにP/Invoke (dllimport)を実装する方法はありますか?P-Invoke in Linux with core with

例:

私はC++ MYLIB.DLLは、.NET Frameworkでコンパイルされています。

このように使うことができますか、それとも.net-coreを使ってlinuxでnative winpiを呼び出すのがサポートされていないのですか?

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

は、あなたがそれを試してみました見てください?どのように失敗したのですか? – svick

+0

多くのPInvokeは、Microsoftが.NET Core自体を開発するために使用しています。だから私は驚いています。 –

答えて

11

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

5

dllもWindows OSにのみ存在し、.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