欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

如何在Windows和Linux上進行跨平臺P

黃文隆2年前14瀏覽0評論

如何在Windows和Linux上進行跨平臺P?

NET的程序是和Java一樣的托管代碼,在底層操作上,具有很大的局限性,像Java的JNI一樣,.NET具有Platform Invoke(平臺調(diào)用,通常叫P/Invoke)。本文中,Linux下的.NET托管代碼運行在Mono CLR上。之所以做跨平臺的P/Invoke,是因為考慮到有些客戶在Win32/WinCE等系統(tǒng)中開發(fā)的.NET程序,需要換到Linux平臺運行。嵌入式開發(fā)中,經(jīng)常需要操作IO,.NET程序就通過P/Invoke來調(diào)用一些用比如c/c++一類語言開發(fā)的native代碼完成IO操作。這時候針對windows編寫的native代碼,就不能不加修改的移植到Linux上,要完成這個移植工作就需要編寫Linux下的native代碼。但如何做到不修改.NET程序呢,下面就讓筆者以實例講述。 要保證.NET程序不加修改,不許重新編譯,需要做到native代碼具有一致的接口。比如我們有native.dll何libnative.so兩個不同系統(tǒng)下的動態(tài)鏈接庫,在.NET程序中,調(diào)用動態(tài)庫中的getSum(int a,int b)函數(shù),則需要在native.dll和libnative.so中都存在getSum(int a, int b)函數(shù),而且導(dǎo)出的名字要一致,都是getSum。編譯時要注意編譯器對符號名稱的修飾,vc編譯器中,可以用Module-Defination File(.def)文件來規(guī)范到處的函數(shù)名稱。 在.NET的代碼中,透過DllImport引入外部函數(shù)時,指定的鏈接庫模塊不要加擴展名。比如native.dll,只要寫native就好。windows中,會自動尋找native.dll,Linux下對應(yīng)的是libnative.so。 以下是實例代碼: using System; using System.Runtime.InteropServices; namespace Managed { class Program { [DllImport("native")] public static extern int getSum(int a, intb); static void Main(string[] args) { System.Console.WriteLine("Managed code out."); System.Console.WriteLine("1+2=" + getSum(1, 2)); } } } 上邊的代碼演示了從外部動態(tài)鏈接庫引入函數(shù)的方式,注意沒有加擴展名。接下來在看看windows下的c代碼是如何編寫的: /** * native.h 頭文件,聲明函數(shù)原型 */ #ifndef NATIVE_H #define NATIVE_H #ifdef __cplusplus extern "C" { #endif int __stdcall getSum(const int a, const intb); // 原型 #ifdef __cplusplus } #endif #endif /* * native.cpp * 2013-03-05 實現(xiàn)功能的代碼 */ #include "native.h" #include

java調(diào)用jni,如何在Windows和Linux上進行跨平臺P