我有一个 C++ 结构
struct UnmanagedStruct
{
char* s;
};
和一个 C# 结构
struct ManagedStruct {
string s;
}
我怎样才能编组UnmanagedStruct
?我需要使用 StringBuilder 吗?
C++ 库公开UnmanagedStruct
getStruct();
我有一个 C++ 结构
struct UnmanagedStruct
{
char* s;
};
和一个 C# 结构
struct ManagedStruct {
string s;
}
我怎样才能编组UnmanagedStruct
?我需要使用 StringBuilder 吗?
C++ 库公开UnmanagedStruct
getStruct();
编辑和更正:对于p/invoke 调用的返回值,“正常”方法不起作用。我已经习惯了与方法参数相关的正常、、ref
和out
行为,我认为返回值将以类似的方式工作。这是返回值问题的解决方案的链接:
PInvoke error when marshalling struct with a string in it
StringBuilder
如果您将结构作为 byref 参数传递给 C++ 方法,并且字符串是该方法将更改的缓冲区,则只需要使用 a 。对于返回值,您只需要指定字符串的类型,在这种情况下为:
struct ManagedStruct
{
[MarshalAs(UnmanagedType.Lpstr)]
string s;
}
记得添加一个属性来公开字符串,因为s
这里是私有的(没关系,字段应该是私有的)。