我有以下非託管結構。元帥非0終止字符串
struct MyNativeStruct_Foo
{
char product_name[4];
char product_model[2];
}
和託管相當於
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct MyManagedStruct_Foo
{
[MarshalAs(UnmanagedType.LPStr, SizeConst = 4)]
public string product_name;
[MarshalAs(UnmanagedType.LPStr, SizeConst = 2)]
public string product_model;
}
不幸的是,刺不空終止。使用產品名稱的所有4個字符。如果我使用「LPStr」定義託管結構,則字符串必須以0結尾。
是否有另一種方法來定義託管結構?可以定義一個自定義的Marshaller屬性?或者你有其他想法?
注意; 本機結構無法更改。
感謝
安貝格
[編輯] 改爲LPSTR(評論賈森Larke)
請注意,您的C++聲明使用'char'而不是'char_t',所以您的聲明不應該需要'TStr'。另外,你明確地將結構的CharSet設置爲'ANSI' :) – 2012-07-19 08:33:00