我有第三方lib,其签名如下:
int GetError(char *Message, int Length)
此处消息必须是至少大小为Length的缓冲区,否则函数将失败。怎么会PInvoke这个?我已经为消息尝试了Stringbuilder,但是在这里我无法指定长度并且函数失败。
Message参数被声明为函数的输入参数。
答案 0 :(得分:2)
这是例行情况。您要求被调用者填充调用者分配的缓冲区。这是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();