C # вызывает функцию C, которая возвращает структуру с массивом символов фиксированного размера
Таким образом, было много вариантов этого вопроса, и после рассмотрения нескольких я все еще не могу понять его.
Это код C:
<code>typedef struct { unsigned long Identifier; char Name[128]; } Frame; Frame GetFrame(int index); </code>
Это код C #:
<code>struct Frame { public ulong Identifier; [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.I1, SizeConst = 128)] public char[] Name; } [DllImport("XNETDB.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] private static extern Frame GetFrame(int index); </code>
Это последняя попытка, которую я пробовал в C #, и она кажется довольно логичной, но я получаю ошибку "Подпись метода" не совместима с PInvoke. " Так что я немного растерялся из-за того, что попробовать дальше. Любая помощь приветствуется.
Спасибо, Kevin
Updated Kevin added this as an edit to my answer
Вместо этого я должен изменить свой код C:
<code>void GetFrame(int index, Frame * f); </code>
и использовать вместо этого для C #:
<code>struct Frame { public uint Identifier; [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 128)] public string Name; } [DllImport("XNETDB.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] private static extern void GetFrame(int index, ref Frame f); </code>