服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#跨平台开发之使用C/C++生成的动态链接库

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

2022-12-20 14:53痴者工良 C#

这篇文章介绍了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,文章正在撰写中。

以上所述是小编给大家介绍的C#跨平台开发之使用C/C++生成的动态链接库,希望对大家有所帮助。在此也非常感谢大家对服务器之家网站的支持!

原文链接:https://www.cnblogs.com/whuanle/p/10582654.html

延伸 · 阅读

精彩推荐
  • C#C#设计模式之行为型模式详解

    C#设计模式之行为型模式详解

    这篇文章主要为大家详细介绍了C#设计模式之行为型模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    季末的寂寞11252022-01-17
  • C#详解C# 网络编程系列:实现类似QQ的即时通信程序

    详解C# 网络编程系列:实现类似QQ的即时通信程序

    本篇主要介绍了c#实现类似QQ的即时通信程序 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。...

    Learning hard3832021-12-16
  • C#C# 多线程对资源读写时如何控制的方法

    C# 多线程对资源读写时如何控制的方法

    这篇文章主要介绍了C# 多线程对资源读写时如何控制的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    森大科技8192022-09-19
  • C#Unity Shader实现2D水流效果

    Unity Shader实现2D水流效果

    这篇文章主要为大家详细介绍了Unity Shader实现2D水流效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    汐夜6012022-09-06
  • C#C#多线程Thread使用示例详解

    C#多线程Thread使用示例详解

    这篇文章主要为大家详细介绍了C#多线程Thread使用示例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    空山新雨9042022-11-25
  • C#对C#中public、private、protect的区别说明

    对C#中public、private、protect的区别说明

    这篇文章主要介绍了对C#中public、private、protect的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    James-Blackhu11052022-11-14
  • C#C#中WebClient实现文件下载

    C#中WebClient实现文件下载

    本篇文章主要介绍了C#中WebClient实现文件下载,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    sparkdev3622021-12-23
  • C#C# windows语音识别与朗读实例

    C# windows语音识别与朗读实例

    这篇文章主要为大家详细介绍了C# windows语音识别与朗读实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    qq5371668410272022-11-28