PInvoke方法,将固定大小的char []作为输入

时间:2017-07-12 14:35:15

标签: c# pinvoke

我有第三方lib,其签名如下:

int GetError(char *Message, int Length)

此处消息必须是至少大小为Length的缓冲区,否则函数将失败。怎么会PInvoke这个?我已经为消息尝试了Stringbuilder,但是在这里我无法指定长度并且函数失败。

Message参数被声明为函数的输入参数。

1 个答案:

答案 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();