跨平台开发 -- 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++ 支持

《跨平台开发 -- C# 使用 C/C++ 生成的动态链接库》

这一步是是为了在 VS 2017上一套开发,也可以使用其它工具开发C语言程序,甚至在 Linux 中使用 vim 编写、编译都行。

二,写一个简单的C语言程序、生成动态链接库

创建项目后,点击属性,选择生成 .so

《跨平台开发 -- C# 使用 C/C++ 生成的动态链接库》

然后新建一个 test.cpp 文件,右键 – 新建项,C语言代码如下

extern “C” {}

表示{}内的方法函数等可以为外部使用

extern "C" 
{
    int Sum(int a,int b) {
        return a + b;
    }
}

《跨平台开发 -- C# 使用 C/C++ 生成的动态链接库》

右键-生成

然后会要求你添加一个 Linux 主机连接。这里其实加上了没用,但vs必须要你加上才能生成、编译,实际对我们后面的操作没影响。

《跨平台开发 -- C# 使用 C/C++ 生成的动态链接库》

 接下来,看图操作

点击菜单栏的生成-仅用于项目-仅链接xxx

然后下面下面输出栏会报错,不管他,再点击项目-右键生成

《跨平台开发 -- C# 使用 C/C++ 生成的动态链接库》

之后会生成 .so 文件,复制.so文件,存放好

《跨平台开发 -- C# 使用 C/C++ 生成的动态链接库》

三,C# 项目使用此动态链接库

建立一个.NET Core 项目,把 .so 文件复制进去,记得 “始终复制”

《跨平台开发 -- C# 使用 C/C++ 生成的动态链接库》

《跨平台开发 -- C# 使用 C/C++ 生成的动态链接库》

 

新建一个类,类名不重要,主要的是方法名称要一致,参数一致

头部引入

using System.Runtime.InteropServices;

类的代码如下

《跨平台开发 -- C# 使用 C/C++ 生成的动态链接库》

然后使用此类库

 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));
            }
        }
    }

《跨平台开发 -- C# 使用 C/C++ 生成的动态链接库》

发布后打包到 Linux 中运行

《跨平台开发 -- C# 使用 C/C++ 生成的动态链接库》

《跨平台开发 -- C# 使用 C/C++ 生成的动态链接库》

 

笔者现在正在实习,学习范围物联网、嵌入式Linux、云计算、.NET Core。

 

以上只是在 C# 项目中使用 C语言项目的简单例子,笔者实现了.NET Core 开发项目管理设备、对接阿里云IOT,文章正在撰写中。

点赞
  1. cheap zyprexa说道:

    Thanks for the tips about credit repair on this blog. Things i would advice people would be to give up the mentality that they'll buy right now and pay later. As a society all of us tend to do this for many things. This includes holidays, furniture, as well as items we want. However, you have to separate your own wants from all the needs. When you are working to improve your credit rating score you have to make some sacrifices. For example you are able to shop online to save money or you can turn to second hand shops instead of costly department stores with regard to clothing.

  2. cheap viagra说道:

    I enjoy you because of all of your effort on this blog. Ellie enjoys doing internet research and it's easy to see why. All of us hear all about the compelling manner you create functional ideas by means of the blog and as well cause contribution from other ones about this article and my child is being taught a great deal. Enjoy the remaining portion of the new year. You're the one carrying out a first class job.

发表评论

邮箱地址不会被公开。 必填项已用*标注

You must enable javascript to see captcha here!