【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坐标
        }
    }
}
相关推荐
magic 24526 分钟前
Java继承中的静态方法隐藏与实例变量隐藏:深入解析与最佳实践
java·开发语言·javase
软工在逃男大学生38 分钟前
8642 快速排序
c语言·数据结构·c++·算法
我命由我123451 小时前
前端性能优化指标 - DCL(触发时机、脚本对 DCL 的影响、CSS 对 DCL 的影响)
开发语言·前端·javascript·css·性能优化·html·js
maizeman1261 小时前
R语言统计分析——ggplot2绘图4——刻面
开发语言·r语言·可视化·ggplot·刻面
单蠢小威1 小时前
UE5 GAS RPG Character Classes
c++·ue5
DARLING Zero two♡2 小时前
C++传送锚点的内存寻址:内存管理
开发语言·c++·内存管理
Golinie2 小时前
【C++高并发服务器WebServer】-5:内存映射与进程通信
linux·服务器·c++·webserver
敖行客 Allthinker2 小时前
从崩溃难题看 C 标准库与 Rust:线程安全问题引发的深度思考
开发语言·软件需求
Kerwin要坚持日更2 小时前
一文讲解Java中的BIO、NIO、AIO之间的区别
java·开发语言
earthzhang20213 小时前
《深入浅出HTTPS》读书笔记(31):HTTPS和TLS/SSL
开发语言·网络·python·https·1024程序员节