操做環境:Visual Studio 2017vim
如何實現 使用 C# 進行嵌入式開發?函數
.NET Core 雖然實現了跨平臺,可是不可能到處使用 C# 開發,就好像沒人使用SQL開發安卓APP,每種語言都有其優秀的地方和侷限性。工具
就傳感器、32位、16位嵌入式設備,可能只有那麼幾KB的存儲器,那些串口、針腳、電路、信號,只能使用C語言開發。就Linux來講,Linux 自己是C語言開發的,面向C語言有豐富的接口支持和兼容,還有不少地方只能使用C語言。學習
底層應用能夠用C語言來完成,若是要開發一個網站、一個大型應用程序呢?網站
咱們能夠先用 C 語言寫好底層API接口,生成 .SO 動態連接庫,而後使用 C# 引入 C 語言動態連接庫。利用C語言進行底層的接口開發,使用.NET Core/C# 實現跨平臺應用開發,經過預先自定義的API,就能夠掌控全局。阿里雲
這一步是是爲了在 VS 2017上一套開發,也可使用其它工具開發C語言程序,甚至在 Linux 中使用 vim 編寫、編譯都行。雲計算
建立項目後,點擊屬性,選擇生成 .sospa
而後新建一個 test.cpp 文件,右鍵 - 新建項,C語言代碼以下3d
extern 「C」 {}code
表示{}內的方法函數等能夠爲外部使用
extern "C" { int Sum(int a,int b) { return a + b; } }
右鍵-生成
而後會要求你添加一個 Linux 主機鏈接。這裏其實加上了沒用,但vs必需要你加上才能生成、編譯,實際對咱們後面的操做沒影響。
接下來,看圖操做
點擊菜單欄的生成-僅用於項目-僅連接xxx
而後下面下面輸出欄會報錯,無論他,再點擊項目-右鍵生成
以後會生成 .so 文件,複製.so文件,存放好
創建一個.NET Core 項目,把 .so 文件複製進去,記得 「始終複製」
新建一個類,類名不重要,主要的是方法名稱要一致,參數一致
頭部引入
using System.Runtime.InteropServices;
類的代碼以下
而後使用此類庫
public class Test { [DllImport("./libProject2.so",CallingConvention =CallingConvention.Cdecl)] public static extern int Sum(int a,int b); } class Program { static void Main(string[] args) { Console.WriteLine(Test.Sum(666,666)); while (true) { Console.WriteLine("輸入兩個數,用空格隔開,如 666 666"); string[] vs = Console.ReadLine().Split(" "); int a = Convert.ToInt32(vs[0]); int b = Convert.ToInt32(vs[1]); Console.WriteLine(Test.Sum(a,b)); } } }
發佈後打包到 Linux 中運行
筆者如今正在實習,學習範圍物聯網、嵌入式Linux、雲計算、.NET Core。
以上只是在 C# 項目中使用 C語言項目的簡單例子,筆者實現了.NET Core 開發項目管理設備、對接阿里雲IOT,文章正在撰寫中。