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