я иметь структуру в моем 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;
};
, поле следующего является указателем такой же структура. когда я использую обугленных [] вар для строковых переменного, поскольку структура не имеет размера починки VS взять ошибку на общественном ST_HDTextInfo * следующего но при использовании фиксированных обугленного уаг [SIZE_OF_VAR] проблема решительности, но произойти еще одна ошибки. Заполнение переменной char * является новой проблемой! Я использую этот код для преобразования counst строки на символ *
IntPtr p = Marshal.StringToHGlobalAuto("Poor Richard");
char* newCharStr = (char*)(p.ToPointer());
text_info.font_name = newCharStr;
в этой станции моя строка новообращенного обугливается * но VS принять эту ошибку «Левая рука присваивания должен быть переменной, свойство или индексатор» !!!
Должен иметь возможность использовать 'string' как тип. то есть 'public string font_name ', не говоря уже о том, что будет немедленно исправлять все, но это способ пойти и позволить маршаллировать беспокойство по поводу символов и указателей и т. д. – weston
Строка 'char *' не является 'UnmanagedType.ByValTStr'. Попробуйте 'UnmanagedType.LPStr' и обычную строку вместо' char [] '. – Chris
Что такое EN_FontStyle? –