【发布时间】:2022-01-10 00:58:12
【问题描述】:
我有两种将 C 代码编组为 C# 的不同实现。
首先是C代码:
int GetVersion(char * pVer, size_t * piSize);
我在 C# 中的第一次尝试(我没有显示 DllImport 部分):
static extern int GetVersion( byte[] ver, ref UIntPtr size );
以及 C# 中的另一个尝试:
static extern int GetVersion([MarshalAs(UnmanagedType.LPStr)] StringBuilder ver, ref ulong size);
我从网上的不同例子中得到了这些。但我不能断定哪一个是正确的。
【问题讨论】:
-
您做了什么来尝试并确定哪个(如果有的话)是“正确的”?
-
我找到的例子里有这些方式。什么意思?
-
StringBuilder 风格更实用,您不需要 Encoding.GetString()。不要忘记在打电话之前设置它的容量,瞄准高。使用 int 作为第二个参数是实用的。
-
@HansPassant:你怎么知道最后有一个 NUL?越想越觉得没有。
-
因为这是一个实用程序员会做的事情。
标签: c# c marshalling