C# 通过共享内存调用C++ 算法

需求:

C#程序调用 C++开发的dll.

一种C# 程序调用c++ 算法方案_算法怎么被c#调用-CSDN博客

上回书说到,将c++算法封装为dll 插件,c++加载后,暴露C风格接口,然后供C#调用。但是这样有几个问题:

1,一是C# 和C++ 传递字符串时,需要使用char* 涉及到内存在哪方开辟。比如 C++ 将一个字符串传递给C#,由于他们直接只能使用c接口,传递char* 指针,那必须是C++开辟内存,然后将地址给到C#,但是什么时候清空这个内存 又是个问题。

2,C++的算法异常退出时,导致C#的程序也异常退出。业务要求算法出现问题,主程序正常运行。

因此,换了以下的方案,双方通过共享内存交换数据,通过事件相互通知。

架构:

关键步骤:

1,C++端 每个算法 开启一个线程,来等待信号

2,C# 端

 调用算法时,利用事件进行通知,超时后 将当前图片保存,便于后期查找。

备注:

1,C# 端 操作共享内存时,需要调用  系统库(kernel32)中的C函数(OpenFileMapping),因为快。

2,C# 在给共享内存传数据时,使用C的memcpy,不使用本身的Marshal.Copy。也是因为快。

3,双方进行数据交互时,先用4个字节,存入数据的长度,再存入数据内容。比如保存图片,先再内存中存入图片大小,再存入图片数据。 读取时,先读取大小,之后根据大小拷贝数据即可。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 调用 c是指在编程中使用c语言的各种函数和库来实现特定的功能。c语言作为一种高级编程语言,可以被广泛地应用于计算机编程、算法设计、游戏开发等领域。通过调用c语言的各种函数和库,程序员可以利用c语言提供的强大功能来实现各种不同的任务。 在Windows平台上,c语言常常被用于开发各种系统应用程序、驱动程序和图像处理软件等。在Linux环境下,c语言也是非常受欢迎的编程语言,特别是在开发网络应用程序、系统服务和实时系统方面。 要调用c语言的函数和库,程序员需要在程序中包含相应的头文件,并在代码中调用相应的函数。这需要一定的编程经验和技能,以及对c语言的熟悉程度。此外,还需要了解操作系统、编译器等相关知识。 总之,调用c语言是计算机程序设计中非常常见和重要的一部分,它可以为程序员提供一种强大的工具来实现各种不同的任务。不管你是初学者还是经验丰富的程序员,掌握c语言编程的基本技能和知识是非常重要的。 ### 回答2: 在编程语言中,C语言是一种被广泛使用的通用型编程语言。其语法简单,运行速度快,具有高度的可移植性,因此在各种计算机系统上都得到了广泛的应用。调用C函数是指在编程过程中利用C语言中定义的函数,从而实现特定的任务或操作。调用C函数的过程包括函数的声明、函数的调用和函数的返回值处理。在C语言中,函数的声明和函数的实现一般分别放在不同的文件中,并通过头文件的方式进行引用。例如,要调用math.h中定义的sin函数,需要在程序中包含头文件#include <math.h>,然后通过sin()函数的名称来进行调用,例如计算1的正弦值可以写成double x=sin(1.0)。调用C函数需要注意传递参数的类型和顺序、处理函数的返回值、避免函数重复定义等问题,这有助于确保程序的正确性和稳定性。使用C语言编写程序的开发者可以利用C语言的丰富特性和工具库,快速高效地实现各种计算、数据处理等功能,从而为各种应用场景提供强大的支持。 ### 回答3: 调用 C语言指的是在编写程序时借助C语言的函数和库来实现相关功能。C语言是一种面向过程的编程语言,广泛应用于系统软件开发、嵌入式系统开发、游戏开发等领域。在调用C语言时,需要先编写C语言程序并将其编译链接至可执行文件中。然后在其他编程语言的程序中通过调用该可执行文件或连接库中的函数实现C语言的功能。C语言调用方式有很多种,比如在C++程序中调用、通过JNI在Java程序中调用、在Python程序中调用等等。调用C语言可以充分发挥C语言的高效、稳定性等优势,同时也有利于不同编程语言之间的协作与交互。在具体实现过程中,需要注意不同编程语言之间的数据类型转换等问题,以确保调用的效果正确无误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土拨鼠不是老鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值