操做环境: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,文章正在撰写中。