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个字节,存入数据的长度,再存入数据内容。比如保存图片,先再内存中存入图片大小,再存入图片数据。 读取时,先读取大小,之后根据大小拷贝数据即可。

相关推荐
Hua-Jay18 小时前
OpenCV联合C++/Qt 学习笔记(十八)----二维码检测及积分图像
c++·笔记·qt·opencv·学习
皮卡祺q18 小时前
【JVM】:类加载机制,jvm内存布局,垃圾回收,String 不可变性源码分析
java·开发语言·jvm·多线程·string
JAVA面经实录91718 小时前
Java核心底层原理全集(终版无遗漏·生产级PDF)
java·开发语言·学习
java修仙传18 小时前
实习日志:完成算法调用总接口并修复联调问题
java·开发语言·数据库
Rabitebla18 小时前
深入理解 C++ STL:stack 和 queue 的底层原理与实现
c语言·开发语言·数据结构·c++·算法
gCode Teacher 格码致知19 小时前
Python教学:正则表达式的寻找、匹配、替换、删除 四种模式案例-由Deepseek产生
开发语言·python·正则表达式
Zfox_19 小时前
【LangGraph】持久化(Persistence)
开发语言·人工智能·redis·langchain·ai编程·langgraph
blxr_19 小时前
MySql锁机制
java·开发语言
誰能久伴不乏19 小时前
从底层看透音视频架构:FFmpeg 实时视频推流深度解析
linux·c++·tcp/ip·ffmpeg
此生决int19 小时前
C++快速上手java备战期末考——初识java
java·c++·期末复习