C #вызов функции C, которая возвращает структуру с массивом символов фиксированного размера

Итак, было много вариантов этого вопроса, и, просмотрев несколько, я все еще не могу понять.

Это код C:

typedef struct
{
unsigned long Identifier;
char Name[128];
} Frame;

Frame GetFrame(int index);

Это код C #:

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);

Это последняя попытка, которую я пробовал в C #, и это кажется довольно логичным, но я получаю сообщение об ошибке «Подпись метода не совместим с PInvoke." Итак, я немного потерялся в том, что попробовать дальше. Любая помощь приветствуется.

Спасибо, Кевин

ОбновленоКевин добавил это как редактирование к моему ответу

Вместо этого я должен изменить свой код C:

void GetFrame(int index, Frame * f);

и использовать вместо этого для C#:

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);
18
задан Cobra_Fast 8 September 2013 в 00:17
поделиться