我有一个具有以下签名的第三方库:
int GetError(char *Message, int Length)
这里的消息必须是至少大小为 Length 的缓冲区,否则函数将失败。 PInvoke 这个怎么办?我已经尝试使用 Stringbuilder 来获取消息,但在这里我无法指定长度并且函数失败。
Message 参数被声明为函数的输入参数。
这是一个例行场景。您要求被调用者填充调用者分配的缓冲区。这是
StringBuilder
的领域。
p/invoke 声明将是:
[DllImport(dllname, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.???)]
public static extern int GetError(StringBuilder message, int length);
您想必知道调用约定是什么,并且可以填写它。
然后您可以像这样调用该函数:
StringBuilder message = new StringBuilder(256);
int retval = GetError(message, message.Capacity);
// check retval for error conditions
string error = message.ToString();