当前位置: 代码迷 >> 综合 >> C++:c#与c++中结构体对齐问题
  详细解决方案

C++:c#与c++中结构体对齐问题

热度:49   发布时间:2024-01-30 10:15:06.0

使用C#调用C++的dll,参数传递结构体,发现定义的结构体大小不一样,同样定义的结构体,在C#和C++中使用sizeof查看后所占字节数不一样,导致乱码。

原来要对C#代码进行对齐处理

对齐方法如下

C++中定义结构体


typedef struct
{bool useLogo = false;Point p1;Point p2;Point p3;Point p4;bool useRestrictedArea = false;Point RestrictedAreaP1;Point RestrictedAreaP2;Point RestrictedAreaP3;Point RestrictedAreaP4;double highAngle;double lowAngle;int logoClass;int intFirstMatchImgNum ;double doubleSecondMatchAngleRange;double OtherLogoDetectAngle;int thresholdNum1 ;int thresholdNum2 ;int thresholdNum3 ;char csvDir[128];int xiaci_area_threshold;int xiaci_num_threshold;} detectImgConfig;

c#中定义结构体


[StructLayout(LayoutKind.Sequential)]
public struct detectImgConfig
{public bool useLogo;public Point p1;public Point p2;public Point p3;public Point p4;public bool useRestrictedArea ;public Point RestrictedAreaP1;public Point RestrictedAreaP2;public Point RestrictedAreaP3;public Point RestrictedAreaP4;public double highAngle;public double lowAngle;public int logoClass;public int intFirstMatchImgNum;public double doubleSecondMatchAngleRange;public double OtherLogoDetectAngle;public int thresholdNum1;public int thresholdNum2;public int thresholdNum3;public int xiaci_area_threshold;public int xiaci_num_threshold;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]public string csvDir;
};

按照这种方式定义的结构体就可以对齐了,不会产生乱码

  相关解决方案