我有一个要从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
始终为空。