济南搜索引擎优化网站,梵克雅宝戒指,网站建设和客户对接内容,大连今天最新通知C#调C的接口#xff0c;给C传结构体数组 1、背景2、实现 1、背景
C#软件创建了一个结构体数组用来存储图像的区域信息#xff0c;分别是矩形框的左上像素的xy坐标和矩形框右下像素的xy坐标。需要传入给调用的C函数的参数列表中#xff0c;我们选择使用C#传入一个结构体数组… C#调C的接口给C传结构体数组 1、背景2、实现 1、背景
C#软件创建了一个结构体数组用来存储图像的区域信息分别是矩形框的左上像素的xy坐标和矩形框右下像素的xy坐标。需要传入给调用的C函数的参数列表中我们选择使用C#传入一个结构体数组指针的方式C的参数列表中也使用数组指针来接收这个变量。
2、实现
首先要保证C#和C两边定义的结构体要完全一致。这里给出我在C中的定义
struct MaskDataStruct
{int leftTop_X;int leftTop_Y;int rightDown_X;int rightDown_Y;
};然后是C函数接口的定义
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#中该结构体的定义
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坐标}}
}