我是一個新的C#用戶。我有一個C/C++結構如下:如何在C#中使用Struct數組#
typedef struct
{
float x;
float y;
}Point2f;
typedef struct
{
int id;
unsigned char charcode;
}CharResultInfo;
typedef struct
{
int strlength;
unsigned char strval[1024];
CharResultInfo charinfo[1024];
}StringResultInfo;
typedef struct
{
int threshold;
int polarity;
bool inverted;
}Diagnotices;
typedef struct
{
Point2f regioncenter;
StringResultInfo stringinfo;
Diagnotics diagnotics;
}SingleOutResult;
我使用C#定義相同的結構象下面這樣:
[StructLayoutAttribute(LayoutKind.Sequential)]
public struct Point2f
{
public double x;
public double y;
}
[StructLayoutAttribute(LayoutKind.Sequential)]
public unsafe struct DF_TAdvOCRCharResultInfo
{
public Int32 id;
public char charcode;
}
[StructLayoutAttribute(LayoutKind.Sequential)]
public unsafe struct DF_TAdvOCRStringResultInfo
{
public int strlength;
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 1024)]
public string strval;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 1024, ArraySubType = UnmanagedType.Struct)]
public CharResultInfo[] charinfo;
}
[StructLayoutAttribute(LayoutKind.Sequential)]
public unsafe struct Diagnotics
{
public Int32 polarity;
[MarshalAsAttribute(UnmanagedType.I1)]
public bool inverted;
}
[StructLayoutAttribute(LayoutKind.Sequential)]
public unsafe struct OutResult
{
public Point2f regioncenter;
public StringResultInfo stringinfo;
public Diagnotics diagnotics;
}
然而,當我在C#項目下面使用:
OutResult *pResult = (OutResult *)inputparam; //inputparam input from C/C++ dll
Complier輸出:
錯誤CS0208:無法取地址,得到的大小,或者聲明 一個指向託管類型(「***。OutResult」)
我的問題是,爲什麼結構指針不能使用,如何固定?
我在C/C#互操作中沒有任何經驗。因此,讓我澄清一下:IIUC'StringResultInfo'類型是通過程序的C部分中的'typedef'聲明的。當你在'OutResult'中使用它作爲類型時,C#部分如何瞭解這個名稱?等價的C#類型看起來是'DF_TAdvOCRStringResultInfo'。 –
這是我的錯,我忘了修改C#中的結構名稱; – halolzx