【发布时间】:2016-04-22 09:11:48
【问题描述】:
我是 C# 新用户。我在下面有一个 C/C++ 结构:
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
编译器输出:
错误 CS0208:无法获取地址、获取大小或声明 指向托管类型的指针 ('***.OutResult')
我的问题是为什么不能使用结构指针以及如何修复?
【问题讨论】:
-
我在 C/C# 互操作方面没有任何经验。所以让我要求澄清一下:IIUC 类型
StringResultInfo是通过程序的 C 部分中的typedef声明的。当您将其用作OutResult中的类型时,C# 部分如何了解此名称?等效的 C# 类型似乎是DF_TAdvOCRStringResultInfo。 -
是我的错,我忘了修改C#中的结构名;