【C#/C++】C#调C++的接口,给C++传结构体数组

C#调C++的接口,给C++传结构体数组

1、背景

C#软件创建了一个结构体数组用来存储图像的区域信息,分别是矩形框的左上像素的xy坐标和矩形框右下像素的xy坐标。需要传入给调用的C++函数的参数列表中,我们选择使用C#传入一个结构体数组指针的方式,C++的参数列表中也使用数组指针来接收这个变量。

2、实现

首先要保证C#和C++两边定义的结构体要完全一致。这里给出我在C++中的定义:

cpp 复制代码
struct MaskDataStruct
{
	int leftTop_X;
	int leftTop_Y;
	int rightDown_X;
	int rightDown_Y;
};

然后是C++函数接口的定义:

cpp 复制代码
CPPDLL_API int Detect(..., MaskDataStruct* MaskList, ...)
{
	...;
	MaskDataStruct MaskData;
	for(int ii = 0; ii < 4; ii++)
	{
		MaskDataStruct accept = *(MaskList + ii);
		MaskData.leftTop_X   = accept.leftTop_X;
		MaskData.leftTop_Y   = accept.leftTop_Y;
		MaskData.rightDown_X = accept.rightDown_X;
		MaskData.rightDown_Y = accept.rightDown_Y;
		
		int delta_h = MaskData.rightDown_Y - MaskData.leftTop_Y;
		int delta_w = MaskData.rightDown_X - MaskData.leftTop_X;

		cv::Rect no_roi1(MaskData.leftTop_X, MaskData.leftTop_Y, delta_w, delta_h);
		frame(no_roi1).setTo(cv::Scalar(0, 0, 0));
	}
	...;
}

c#中该结构体的定义:

csharp 复制代码
namespace CommonElement
{
    public class MaskDataStruct
    {
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct MaskData_Str
        {
            public int leftTop_X;//左上角X坐标
            public int leftTop_Y;//左上角Y坐标
            public int rightDown_X;//右下角X坐标
            public int rightDown_Y;//右下角Y坐标
        }
    }
}
相关推荐
影视飓风TIM6 小时前
C++哈希表深度剖析:冲突处理、rehash、迭代器与unordered容器封装
c++·哈希算法·散列表
传奇开心果编程6 小时前
【Rust入门知识点学与练】第5课:函数
开发语言·学习·rust
秋田君6 小时前
Qt_QMediaPlayer类与QMediaPlaylist类
开发语言·qt
统计学小王子6 小时前
数学建模国赛倒计时6天——《软件工具(R语言精讲)》
开发语言·数学建模·r语言
C++ 老炮儿的技术栈7 小时前
Qt5 使用 QPainter 绘制阿基米德螺线
开发语言·c++·windows·qt·代码化
EasyGBS7 小时前
从接入到稳定播放:无插件直播H5视频流媒体播放器EasyPlayer.js如何撑起Web端流媒体
开发语言·前端·javascript
FfHUCisI7 小时前
GMP 调度器:Go 并发的心脏是如何跳动的
开发语言·golang·php
Java小白笔记7 小时前
Java 实现阿里云 OSS 文件上传链路:普通上传、秒传、分片与断点续传
java·开发语言·数据库·spring·阿里云
传奇开心果编程7 小时前
【Rust入门知识点学与练】第9课:Vec 动态数组
开发语言·学习·rust
卢锡荣7 小时前
单芯掌控多口互联|乐得瑞 LDR6020 PD3.1 多通道 Type‑C 控制 SOC 芯片
c语言·开发语言