编组指向C字符串的指针(char **)

时间:2019-05-17 18:03:16

标签: c# c pinvoke marshalling

我有一个要从C#拨打的电话,C声明为:

extern void UPOS_DLL_METHOD udmRetrieveStatistics(
    udm_Handle device,
    udm_ASCIIZString *statisticsBuffer
);

udm_ASCIIZString是typedef:

typedef char *udm_ASCIIZString;

被调用的代码特别保证在下一次调用之前不会释放该字符串。我该如何完成?我最近的尝试是:

[DllImport("CPOSUDMAdapter.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void udmRetrieveStatistics(int device, ref IntPtr statisticsBuffer);

我这样调用函数:

IntPtr dataPtr = default(IntPtr);
udmRetrieveStatistics(_printerDevice, ref dataPtr);
var data = Marshal.PtrToStringAnsi(dataPtr);
Console.WriteLine("data = <" + data + ">");

data始终为空。

0 个答案:

没有答案