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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/705557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【编程语言之·调试输出打印技巧】

系列文章目录 文章目录 前言一、调试打印输出开关1.1宏定义应用 二、打印错误的函数2.1 perror()2.2 strerror() 三、示例总结 前言 一、调试打印输出开关 1.1宏定义应用 示例1: #define DEBUG_ON 0 #if DEBUG_ON #define DEBUG(...) qDebug(__VA_ARGS__) #else …

【Python笔记-设计模式】中介者模式

一、说明 中介者模式是一种行为设计模式,减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。 (一) 解决问题 降低系统中对象之间的直接通信,将复杂的交互转化为通过中介者进行的间接交…

RK3568平台开发系列讲解(Linux系统篇)SPI 客户端通信

🚀返回专栏总目录 文章目录 一、spi_transfer二、spi_message三、初始化沉淀、分享、成长,让自己和他人都能有所收获!😄 SPI I/O模型由一组队列消息组成。我们提交一个或多个struct spi_message结构时,这些结构以同步或异步方式处理完成。单个消息由一个或多个struct sp…

Basisformer时间序列预测 锂电池SOC估计

Basisformer是一种基于Transformer架构的模型,用时间序列预测任务。 【Basisformer】时间序列预测 【锂电池SOC估计】 [1]采用自适应监督自监督对比学习方法学习时序特征 [2]通过双向交叉注意力机制计算历史序列和基准序列之间的相关系数 [3]最后通过相关系数…

动态规划(算法竞赛、蓝桥杯)--深入浅出的完全背包DP

1、B站视频链接&#xff1a;E09【模板】背包DP 完全背包_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N1010; int n,m; int v[N],w[N],f[N][N];int main(){scanf("%d%d",&n,&m);for(int i1;i<n;i){scanf("%d%d…

人像背景分割SDK,智能图像处理

美摄科技人像背景分割SDK解决方案&#xff1a;引领企业步入智能图像处理新时代 随着科技的不断进步&#xff0c;图像处理技术已成为许多行业不可或缺的一部分。为了满足企业对于高质量、高效率人像背景分割的需求&#xff0c;美摄科技推出了一款领先的人像背景分割SDK&#xf…

一款实用的.NET Core加密解密工具类库

前言 在我们日常开发工作中&#xff0c;为了数据安全问题对数据加密、解密是必不可少的。加密方式有很多种如常见的AES&#xff0c;RSA&#xff0c;MD5&#xff0c;SAH1&#xff0c;SAH256&#xff0c;DES等&#xff0c;这时候假如我们有一个封装的对应加密解密工具类可以直接…

虚拟机JVM

虚拟机 1、定义jvm 假想计算机 运行在操作系统之上 和硬件之间没有直接交互 包括 一套字节码指令、寄存器、栈、垃圾回收、堆 一个存储方法域 jvm:承担一个翻译工作&#xff0c;动态的将java代码编译成操作系统可以识别的机器码。 从软件层面屏蔽了不同操作系统在底层硬件与指…

petalinux-config : command not found 和petalinux-build: command not found

发现这两个问题都是因为&#xff1a;没有先设置 petalinux 的作环境 先输入命令 先执行 source /opt/pkg/petalinux/2020.2/settings.sh 或者 sptl 然后切换目录&#xff0c;到相应的目录&#xff0c;就可以了

【设计模式】使用门面模式简化接口的复杂度

文章目录 1.概述2.门面模式的定义3.门面模式的应用场景4.总结 1.概述 门面模式&#xff08;Facade Pattern&#xff09;又叫做外观模式&#xff0c;它通过为子系统提供一个统一的高层入口的方式&#xff0c;达到简化复杂系统的使用以及降低客户端与子系统之间的耦合度的效果&a…

LeetCode53题:最大子数组和(python3)

代码思路&#xff1a; 动态规划&#xff0c;使用动态规划如果上一个数是大于0&#xff0c;则加上&#xff1b;如果小于0直接用0。这样做的好处就是最终直接是最大子数组和。 class Solution:def maxSubArray(self, nums: List[int]) -> int:for i in range(1,len(nums)):nu…

Docker Volume

"Ice in my vein" Docker Volume(存储卷) 什么是存储卷? 存储卷就是: “将宿主机的本地文件系统中存在的某个目录&#xff0c;与容器内部的文件系统上的某一目录建立绑定关系”。 存储卷与容器本身的联合文件系统&#xff1f; 在宿主机上的这个与容器形成绑定关系…

【kubernetes】关于k8s集群中kubectl的陈述式资源管理

目录 一、k8s集群资源管理方式分类&#xff1a; &#xff08;1&#xff09;陈述式资源管理方式&#xff1a;增删查比较方便&#xff0c;但是改非常不方便 &#xff08;2&#xff09;声明式资源管理方式&#xff1a;yaml文件管理 二、陈述式资源管理方法&#xff1a; 三、ku…

leetcode移动零

leetcode移动零 Given an integer array nums, move all 0’s to the end of it while maintaining the relative order of the non-zero elements. Note that you must do this in-place without making a copy of the array. Example 1: Input: nums [0,1,0,3,12] Output…

linux下gcc编译时默认是32位还是64位,怎么指定为32or64?

本来是想研究一下long的字节大小sizeof(long)&#xff0c;于是写了代码&#xff1a; #include <stdio.h> int main() {long a 10;printf("%d\n", sizeof(a));return 0; } 我当时使用的是win10系统&#xff0c;使用的是vs 2022&#xff0c;然后对以上代码进行…

[面试]我们常说的负载均衡是什么东西?

什么是负载均衡 如果用户量很多, 服务器的流量也随之增大, 此时出现两个问题, 软件性能下降 容易出现单点故障 为了解决这些问题, 引入了集群化架构, 也就是把一个软件同时部署在多个服务器上 集群化架构出现的问题 架构改变后又出现了两个问题 如何将请求均匀的发送到多…

3D WEB轻量化引擎HOOPS:促进3D软件的创新与协作

CAD软件一直以来都在现代工程、建筑、制造和设计领域发挥着至关重要的作用。在数字时代&#xff0c;CAD软件的开发者不断追求提高软件性能、增加功能和改善用户体验&#xff0c;在这一努力中&#xff0c;HOOPS技术&#xff08;高度优化的面向对象并行软件&#xff09;滑块露头角…

地图匹配+目标定位

1. 思路 掌握飞机位姿和吊舱位姿解算目标粗略GPS根据该GPS调用在线或离线卫星图将吊舱图像和卫星图进行匹配通过解算对目标进行精确定位&#xff0c;就很简单了 调用卫星图匹配 2. 高权值区 2.1 Cross-View Object Geo-Localization in a Local Region With Satellite Imag…

SpringBoot快速入门(黑马学习笔记)

需求 需求&#xff1a;基于SpringBoot的方式开发一个Web应用&#xff0c;浏览器发起请求/hello后&#xff0c;给浏览器返回字符串"Hello World~"。 开发步骤 第一步&#xff1a;创建SpringBoot工程项目 第二步&#xff1a;定义HelloController类&#xff0c;添加方…

python Matplotlib Tkinter-->tab切换1

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 pillow 10.1.0 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox import …