跨平台开发 -- 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项目及结构 开 ...
随机推荐
- Java 8 新特性-菜鸟教程 (3) -Java 8 函数式接口
Java 8 函数式接口 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. 函数式接口可以被隐式转换为lambda表达式. 函数式接 ...
- Json格式循环遍历,Json数组循环遍历
Json格式数据如何遍历,这里我们可以用for..in实现 例如最简单的json格式 , 'handsome' : 'yes' }; for( var key in json1 ){ console. ...
- ApiGen 4.0配置项
Usage: generate [-s|--source="..."] [-d|--destination="..."] [--access-levels=&q ...
- UIKit 框架之WebView
// // ViewController.m // UIWebView // // Created by City--Online on 15/5/18. // Copyright (c) 2015年 ...
- VB.NET文件读写(C#可以改写)
VB.NET也可以用using 先FileStream,再StreamReader(写用StreamWriter) Using fs As New FileStream(p1, FileMode.Op ...
- CentOS7 配置静态IP
在mini安装完CentOS7后,如果想让电脑能够上网,则必须要进行网络配置. 本虚拟机使用NAT模式上网,网络配置步骤如下: ifconfig命令查到机器网卡: vi /etc/sysconfig/ ...
- The area (hdu1071)积分求面积
The area Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 非常可乐(杭电hdu1495)bfs
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- Android - AMS源码分析
Android核心分析之AMS App和AMS(SystemServer进程)还有zygote进程分属于三个独立的进程 App与AMS通过Binder进行IPC通信,AMS(SystemServer进 ...
- php解释命令行的参数
php cli模式下,可以用$argc, $argv来读取所有的参数以及个数,如: ghostwu@ghostwu:~/php/php1/1$ cat go1 #!/usr/bin/php <? ...