0

这是我将最后一个错误放入缓冲区的代码,但我不知道如何将 IntPtr 转换为我可以读取的内容......我只是得到一个长数字。

/// Return Type: void
///pErrorCode: ABS_DWORD*
///ppErrorMessage: ABS_CHAR**
        [System.Runtime.InteropServices.DllImportAttribute("bsapi.dll", EntryPoint = "ABSGetLastErrorInfo", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
        public static extern void ABSGetLastErrorInfo(ref uint pErrorCode, ref System.IntPtr ppErrorMessage);

这是来自手册:

void ABSGetLastErrorInfo(
OUT ABS_DWORD *pErrorCode
OUT const ABS_CHAR **ppErrorMessage
)

描述 检索有关在当前线程中发生的最后一个 BSAPI 错误的附加信息。

ppErrorMessage 在输出上,它被设置为指向一个缓冲区,该缓冲区包含带有文本消息的以零结尾的字符串。

如果没有提供消息,它指向空字符串,因此调用者不需要检查它是否为 NULL。

缓冲区由 BSAPI 管理;不要使用 ABSFree 来释放它。请注意,缓冲区仅在同一线程中执行其他 BSAPI 调用之前有效。在下一次调用之后,缓冲区可能会被 BSAPI 释放或重用。如果您需要记住该消息,则必须将其复制到您自己的缓冲区中。

4

1 回答 1

2

定义为

 public static extern void ABSGetLastErrorInfo(ref uint pErrorCode, StringBuilder ppErrorMessage);

StringBuilder用于输出字符串。见这里

如果可以输入和/或输出字符串参数,则使用 System.StringBuilder 类型。StringBuilder 类型是一种有用的类库类型,它可以帮助您有效地构建字符串,并且它恰好非常适合将缓冲区传递给函数代表您填充字符串数据的本机函数。一旦函数调用返回,您只需在 StringBuilder 对象上调用 ToString 即可获取 String 对象。


更新

正如 Jim Kindly 提到的,定义StringBuilder为 ref。

public static extern void ABSGetLastErrorInfo(ref uint pErrorCode, ref StringBuilder ppErrorMessage);
于 2011-05-03T15:43:49.860 回答