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>

Ответы на вопрос(3)

Ваш ответ на вопрос