跨平台开发--C# 使用C/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++ 支持


微信图片_20220501181850.png

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


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


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

微信图片_20220501182025.png

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

extern “C” {}

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

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

微信图片_20220501182301.png

右键-生成

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

微信图片_20220501182424.png

接下来,看图操作

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

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

微信图片_20220501182428.gif

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

微信图片_20220501182432.png


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


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

微信图片_20220501182438.png

微信图片_20220501182444.png

 

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

头部引入

using System.Runtime.InteropServices;

类的代码如下

微信图片_20220501182617.png

然后使用此类库

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

微信图片_20220501182650.png

发布后打包到 Linux 中运行

微信图片_20220501182655.png

微信图片_20220501182701.gif

 

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

 

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

相关文章
|
10月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
2091 2
|
10月前
|
缓存 算法 程序员
C++STL底层原理:探秘标准模板库的内部机制
🌟蒋星熠Jaxonic带你深入STL底层:从容器内存管理到红黑树、哈希表,剖析迭代器、算法与分配器核心机制,揭秘C++标准库的高效设计哲学与性能优化实践。
C++STL底层原理:探秘标准模板库的内部机制
|
10月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
343 11
|
10月前
|
IDE 编译器 开发工具
msvcp100.dll,msvcp120.dll,msvcp140.dll,Microsoft Visual C++ 2015 Redistributable,Visual C++ 运行库安装
MSVC是Windows下C/C++开发核心工具,集成编译器、链接器与调试器,配合Visual Studio使用。其运行时库(如msvcp140.dll)为程序提供基础函数支持,常因缺失导致软件无法运行。通过安装对应版本的Microsoft Visual C++ Redistributable可解决此类问题,广泛应用于桌面软件、游戏及系统级开发。
1161 2
|
11月前
|
并行计算 C++ Windows
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
440 6
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
428 10
|
JSON C++ 数据格式
C++20 高性能基础库--兰亭集库助力开发者构建高性能应用
这次分享的主题是《高性能基础库--兰亭集库助力开发者构建高性能应用》的实践经验。主要分为三个部分: 1. 业务背景 2. 雅兰亭库架构 3. 业务优化
645 9
|
XML 网络协议 API
超级好用的C++实用库之服务包装类
通过本文对Boost.Asio、gRPC和Poco三个超级好用的C++服务包装类库的详细介绍,开发者可以根据自己的需求选择合适的库来简化开发工作,提高代码的效率和可维护性。每个库都有其独特的优势和适用场景,合理使用这些库可以极大地提升C++开发的生产力。
449 11