跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
操作环境: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(,));
while (true)
{
Console.WriteLine("输入两个数,用空格隔开,如 666 666");
string[] vs = Console.ReadLine().Split(" ");
int a = Convert.ToInt32(vs[]);
int b = Convert.ToInt32(vs[]);
Console.WriteLine(Test.Sum(a,b));
}
}
}

发布后打包到 Linux 中运行


笔者现在正在实习,学习范围物联网、嵌入式Linux、云计算、.NET Core。
以上只是在 C# 项目中使用 C语言项目的简单例子,笔者实现了.NET Core 开发项目管理设备、对接阿里云IOT,文章正在撰写中。
跨平台开发 -- C# 使用 C/C++ 生成的动态链接库的更多相关文章
- C#移动跨平台开发(2)Xamarin移动跨平台解决方案是如何工作的?
概述 上一篇 C#移动跨平台开发(1)环境准备发布之后不久,无独有偶,微软宣布了开放.NET框架源代码并且会为Windows.Mac和Linux开发一个核心运行时(Core CLR),这也是开源的!I ...
- Visual Studio 2015 移动跨平台开发初体验
微软换了新 CEO 后变化很大,对我们团队最有利的消息就是 Visual Studio 2015 支持移动应用跨平台开发. 还记不记得很早之前,Xamarin 宣布与微软成为合作伙伴的消息.显然,Xa ...
- 快速打造跨平台开发环境 vagrant + virtualbox + box
工欲善其事必先利其器,开发环境 和 开发工具 就是 我们开发人员的剑,所以我们需要一个快并且好用的剑 刚开始做开发的时候的都是把开发环境 配置在 自己的电脑上,随着后面我们接触的东西越来越多,慢慢的电 ...
- Visual Studio 2015 和 Apache Cordova 跨平台开发入门(一)
基于 Windows 10 的 Visual Studio 2015 跨平台的应用开发主要分为基于Visual Studio 安装 Xamarin 扩展的跨Android.iOS 和 Windows的 ...
- [.net 面向对象程序设计深入](9).NET Core 跨平台开发环境搭建
[.net 面向对象程序设计深入](9).NET Core 跨平台开发环境搭建 1.概述 读前必备:认识.NET Core 上篇介绍了.NET 新的生态环境:包括.NET Framework..NET ...
- Flutter 实现原理及在马蜂窝的跨平台开发实践
一直以来,跨平台开发都是困扰移动客户端开发的难题. 在马蜂窝旅游 App 很多业务场景里,我们尝试过一些主流的跨平台开发解决方案, 比如 WebView 和 React Native,来提升开发效率和 ...
- 10分钟,AppCan帮你搞定跨平台开发APP问题!
跨平台开发APP时,开发者总会遇到一些问题,如打包失败等等,尤其对于iOS来说,由于它的限制性会导致一些状况发生(如证书上传问题等),小编总结了几个AppCan在线IOS打包失败常见的情况及排查技巧, ...
- C++的可移植性和跨平台开发
概述 今天聊聊C++的可移植性问题.如果你平时使用C++进行开发,并且你对C++的可移植性问题不是非常清楚,那么我建议你看看这个系列.即使你目前没有跨平台开发的需要,了解可移植性方面的知识对你还是很有 ...
- React03 移动端跨平台开发
目录 React-day03 RN移动端开发 了解React-Native 了解React-Native工作流程 创建第一个React-Native项目 * 了解React-Native项目及结构 开 ...
随机推荐
- let‘s encrypt之nginx-https没有小锁
1.使用let's encrypt 加密后的nginx,访问的时候,发现没有小锁,chrome中: 火狐浏览器上: 会看到如上信息,这是因为css.图片或javascript任然通过http提供,可以 ...
- MAMP 安装phpredis 扩展
phpredis扩展包地址: https://github.com/nicolasff/phpredis 1.下载php源码 (http://php.net/releases/ 选择php5.5.1 ...
- Oracle左连接、右连接、全外连接以及(+)号用法
1.准备工作 Oracle 外连接(OUTER JOIN)包括以下: 左外连接(左边的表不加限制) 右外连接(右边的表不加限制) 全外连接(左右两表都不加限制) 对应SQL:LEFT/RIGHT/F ...
- C#多线程和线程池[转]
1.概念 1.0 线程的和进程的关系以及优缺点 windows系统是一个多线程的操作系统.一个程序至少有一个进程,一个进程至少有一个线程.进程是线程的容器,一个C#客户端程序开始于一个单独的线程,C ...
- windows下nodejs监听80端口
windows下nodejs监听80端口时提示端口被占用报错,解决方案如下: 1.cmd---netstat -ano查看是什么程序占用了80端口: 2.控制面板--管理工具--服务--停止 SQL ...
- [日常] Go语言圣经--Map习题
练习 4.8: 修改charcount程序,使用unicode.IsLetter等相关的函数,统计字母.数字等Unicode中不同的字符类别. 练习 4.9: 编写一个程序wordfreq程序,报告输 ...
- CSS学习笔记03 CSS层叠性、继承性、特殊性
层叠性 所谓层叠性是指多种CSS样式的叠加,也就是说后面设置的样式会层叠(覆盖)之前的样式,层叠性的前提是CSS的选择器的优先级相同,例如,当使用内嵌式CSS样式表定义<p>标记字号大小为 ...
- Windows Server 2008R2常见的500错误
每次公司服务器装系统后再去部署服务,都会碰到这个问题,这里记录一下问题的解决方法 遇到“500 – 内部服务器错误. 您查找的资源存在问题,因而无法显示.”的问题. 解决办法: 1.解决方法:打开II ...
- 天天生鲜 - App设计
天天生鲜-思路数据库设计 天天生鲜-各个App 全文检索 天天生鲜-静态文件 一.项目目录 daily_fresh_demo - daily_fresh_demo - df_cart # 购物车功能 ...
- w3school前端教程合集
有关前端开发的w3c教程合集. http://caibaojian.com/w3school/ 地图 ajax教程 Canvas教程 CSS教程 CSS3教程 CSS3选择器 CSS参考手册 DHTM ...