私は新しいC#ユーザーです。私はC#プロジェクトに以下で使用する場合、しかしC#でのStruct Arrayの使い方
[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;
}
:
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#を使用します。私は、以下のC/C++の構造体を持っている
OutResult *pResult = (OutResult *)inputparam; //inputparam input from C/C++ dll
コンプライアー出力:
エラーCS0208: 、のサイズを取得、または管理タイプ(「***。OutResult」)
に のポインタを宣言し、私の質問は、なぜ構造体ポインタを使用することはできませんされ、どのように固定するために?
私はC/C#相互運用の経験が全くありません。だから私は明確化を求める:IIUCは 'StringResultInfo'型はあなたのプログラムのC部分に' typedef'で宣言されています。あなたが 'OutResult'の型として使うとき、C#部分はこの名前についてどうやって学びますか?同等のC#型は 'DF_TAdvOCRStringResultInfo'と思われます。 –
これは私のせいです.C#で構造体名を変更するのを忘れました。 – halolzx