【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坐标
        }
    }
}
相关推荐
asdzx675 分钟前
C#:从 URL 下载 PDF 文档到本地
开发语言·pdf·c#
阿凤219 分钟前
uniapp如何修改下载文件位置
开发语言·前端·javascript
m0_7167652310 分钟前
数据结构--循环链表、双向链表的插入、删除、查找详解
开发语言·数据结构·c++·学习·链表·青少年编程·visual studio
聆风吟º11 分钟前
【C标准库】深入理解C语言strstr函数:子字符串查找的实用指南
c语言·开发语言·库函数·strstr
XY_墨莲伊11 分钟前
【编译原理】实验一:基于正则文法的词法分析器设计与实现
开发语言·数据结构·算法
Tirzano12 分钟前
springsession全能序列化方案
java·开发语言
坐吃山猪13 分钟前
Python20_MCP添加鉴权
开发语言·python
gihigo199831 分钟前
分布式发电的配电网有功-无功综合优化 MATLAB 实现
开发语言·分布式·matlab
人工干智能31 分钟前
科普:python的pandas包中的DataFrame就是二维表
开发语言·python·pandas
浪客川33 分钟前
【百例RUST - 006】一文理解所有权和切片
开发语言·后端·rust