南昌哪里有网站建设,wordpress 标签 边栏,wordpress拖曳式建站,德州网站制作哪家好背景
开发中我们基本使用windows系统比较快捷#xff0c;但是部署的时候我们又希望使用linux比较便宜#xff0c;硬件产商还仅提供了c sdk#xff01;苦了我们做二次开发的码农。
方案 需要确认一件事#xff0c;目前c这门语言不是跨平台的 第一个问题【C生成dll在window…背景
开发中我们基本使用windows系统比较快捷但是部署的时候我们又希望使用linux比较便宜硬件产商还仅提供了c sdk苦了我们做二次开发的码农。
方案 需要确认一件事目前c这门语言不是跨平台的 第一个问题【C生成dll在windows下使用C#调用】解决方案
1、使用vs2022创建一个c window空项目命名为DllForWindows 2、右键单击项目名称选择属性并在属性中修改输出类型为动态链接库dll 3、为我们的源文件目录添加一个main.cpp,内容如下
extern C {__declspec(dllexport) int add(int x, int y) { return x y; }__declspec(dllexport) int sub(int x, int y) { return x - y; }__declspec(dllexport) int mul(int x, int y) { return x * y; }__declspec(dllexport) int div(int x, int y) { return x / y; }
} 4、重新生成解决方案就可以在Debug目录下找到我们的dll了 5、新建一个C# DotNet6 控制台空项目命名为TestDllForWindows 6、把Program.cs代码修改为如下然后重新生成一下解决方案我们会生成bin目录
using System.Runtime.InteropServices;namespace TestDllForWindows
{internal class Program{[DllImport(DllForWindows.dll)]static extern int add(int x, int y);[DllImport(DllForWindows.dll)]static extern int sub(int x, int y);[DllImport(DllForWindows.dll)]static extern int mul(int x, int y);[DllImport(DllForWindows.dll)]static extern int div(int x, int y);static void Main(string[] args){int x 10, y 5;Console.WriteLine(add(x, y));Console.WriteLine(sub(x, y));Console.WriteLine(mul(x, y));Console.WriteLine(div(x, y));}}
}7、拷贝一份我们C生成的dll到 bin/Debug/net6.0目录 8、运行我们的程序可以看到结果如我们所料 第二个问题【C生成so在linux下使用C#调用】解决方案
1、 使用vs2022创建一个c linux空项目命名为SoForLinux 2、 新建main.cpp内容如下【与生成windows动态链接库不同这里不需要__declspec(dllexport)修饰】 3、右键单击项目名称进入属性页修改生成so文件 4、重新生成解决方案可以在Debug文件夹下看到生成了lib前缀的so文件 5、新建一个C# DotNet6 控制台项目名称为TestSoForLinux 6、把Program.cs文件内容修改为如下
using System.Runtime.InteropServices;namespace TestDllForWindows
{internal class Program{[DllImport(libSoForLinux.so)]static extern int add(int x, int y);[DllImport(libSoForLinux.so)]static extern int sub(int x, int y);[DllImport(libSoForLinux.so)]static extern int mul(int x, int y);[DllImport(libSoForLinux.so)]static extern int div(int x, int y);static void Main(string[] args){int x 10, y 5;Console.WriteLine(add(x, y));Console.WriteLine(sub(x, y));Console.WriteLine(mul(x, y));Console.WriteLine(div(x, y));}}
}7、右键单击项目名称选择【发布】 8、点击小铅笔部署模式改为【独立这样linux系统不需要安装dotnet运行环境我们打包的时候就带了进去占用磁盘会稍大一点但是省心】目标运行时为linux-x64【我的ubuntu x64的运行环境就是这个大家根据实际视情况而定】发布选项里勾选生成单个文件【相当于vs尽可能帮我们把应用和依赖包搞成一个文件】 9、保存发布配置并点击发布发布完毕后我们点击打开文件夹 10、把生成的文件TestSoForLinux和C生成的libSoForLinux.so都拷到我们的linux系统同一文件夹下 11、使用终端打开此目录输入如下命令后回车【注意有个英文小数点linux下好像需要指定目录位置】 ./TestSoForLinux