【发布时间】:2012-07-19 08:30:31
【问题描述】:
我有以下非托管结构。
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;
}
不幸的是,stings 不是以 null 结尾的。使用了产品名称的全部 4 个字符。如果我用“LPStr”定义托管结构,则字符串必须以 0 结尾。
还有其他方法来定义托管结构吗?可以定义自定义 Marshaller 属性吗?还是您有其他想法?
注意; 本机结构无法更改。
谢谢
安伯格
[编辑] 改为 LPStr(评论 Jason Larke)
【问题讨论】:
-
请注意,您的 C++ 声明使用
char,而不是char_t,因此您的声明不需要TStr。另外,您将结构的 CharSet 显式设置为ANSI:)
标签: c# c++ marshalling