Выделение указателя на строку C (char **) - PullRequest
1 голос
/ 17 мая 2019

У меня есть вызов, который я хочу сделать из 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 всегда пусто.

...