操作环境:visual studio 2017
如何实现 使用 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,就可以掌控全局。
一,在visual studio 2017 上安装 c/c 支持
这一步是是为了在 vs 2017上一套开发,也可以使用其它工具开发c语言程序,甚至在 linux 中使用 vim 编写、编译都行。
二,写一个简单的c语言程序、生成动态链接库
创建项目后,点击属性,选择生成 .so
然后新建一个 test.cpp 文件,右键 - 新建项,c语言代码如下
extern “c” {}
表示{}内的方法函数等可以为外部使用
extern "c" { int sum(int a,int b) { return a b; } }
右键-生成
然后会要求你添加一个 linux 主机连接。这里其实加上了没用,但vs必须要你加上才能生成、编译,实际对我们后面的操作没影响。
接下来,看图操作
点击菜单栏的生成-仅用于项目-仅链接xxx
然后下面下面输出栏会报错,不管他,再点击项目-右键生成
之后会生成 .so 文件,复制.so文件,存放好
三,c# 项目使用此动态链接库
建立一个.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,文章正在撰写中。
以上所述是小编给大家介绍的c#跨平台开发之使用c/c 生成的动态链接库,希望对大家有所帮助。在此也非常感谢大家对网站的支持!