结构指针和固定字符
struct pointer and fixed char
我的C++中有这样的结构
struct ST_HDTextInfo
{
char* font_name;
char* text;
unsigned int font_color;
unsigned int background_color;
int style;
int font_size;
struct ST_HDTextInfo* next;
};
我在我的 C# 代码中像这样重新声明它
[StructLayout(LayoutKind.Sequential,Pack=4)]
unsafe struct ST_HDTextInfo
{
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 25)]
public fixed char font_name[25];
[MarshalAs(UnmanagedType.ByValTStr, ArraySubType = UnmanagedType.I1, SizeConst = 20)]
public char[] text;
[MarshalAs(UnmanagedType.SysUInt)]
public uint font_color;
[MarshalAs(UnmanagedType.SysUInt)]
public uint background_color;
[MarshalAs(UnmanagedType.SysInt)]
public EN_FontStyle style;
[MarshalAs(UnmanagedType.SysInt)]
public int font_size;
[MarshalAs(UnmanagedType.SysInt)]
public ST_HDTextInfo* next;
};
接下来的字段是指向相同结构的指针。 当我将 char[] var 用于字符串变量时,因为结构没有固定大小 VS 在公共ST_HDTextInfo* 上出错 下一个但是当使用固定的字符变量[SIZE_OF_VAR]时,问题解决了,但发生了另一个错误。填充字符*变量是一个新问题!我使用此代码将字符串转换为字符*
IntPtr p = Marshal.StringToHGlobalAuto("Poor Richard");
char* newCharStr = (char*)(p.ToPointer());
text_info.font_name = newCharStr;
在这个站中,我的字符串转换为 char*,但 VS 接受此错误"赋值的左侧必须是变量、属性或索引器"!!
我解决了这个问题。我使用此示例代码
[StructLayoutAttribute(LayoutKind.Explicit, CharSet = CharSet.Auto, Size=80)]
internal unsafe struct ST_HDTextInfo
{
[FieldOffset(0)]
public fixed char text[25];
[FieldOffset(0)]
public fixed char font_name[20];
[MarshalAs(UnmanagedType.I4)]
[FieldOffset(0)]
public uint font_color;
[MarshalAs(UnmanagedType.I4)]
[FieldOffset(0)]
public uint background_color;
[MarshalAs(UnmanagedType.I4)]
[FieldOffset(0)]
public EN_FontStyle style;
[MarshalAs(UnmanagedType.I4)]
[FieldOffset(0)]
public int font_size;
[FieldOffset(80 - sizeof(long))]
public ST_HDTextInfo* next;
};
相关文章:
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- 字符指针的 Qt 数组
- C++将常量字符* 指针数组传递给对象
- 为什么不能将字符指针定义为数组?
- 在函数内初始化无符号字符指针将返回空指针
- 将字符指针存储到容器中
- 为什么 strtok_r() 只接受字符数组而不接受字符指针
- 字符指针数组内存分配
- 字符指针不递增?
- 如何在C++中使用字符指针
- 确保字符指针始终指向相同的字符串文字
- C++中的字符指针
- 使用unique_ptr的常量字符指针
- 字符指针不断意外更改
- 将字符指针中的十六进制转换为十进制
- 如何将字符*(字符指针)转换为 PCSZ?
- 在向量中存储字符指针
- 字符指针具有不同的值