Итак, было много вариантов этого вопроса, и, посмотрев на несколько, я все еще не могу понять.
Это код C:
typedef struct
{
unsigned long Identifier;
char Name[128];
} Frame;
Frame GetFrame(int index);
Это код С#:
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);
Это последняя попытка, которую я пробовал на С#, и она кажется довольно логичной, но я получаю сообщение об ошибке "Подпись метода не совместима с PInvoke". Итак, я как бы потерял то, что попробовать дальше. Любая помощь приветствуется.
Спасибо, Кевин
Обновлено. Кевин добавил это как отредактировать мой ответ
Вместо этого я должен изменить свой код C:
void GetFrame(int index, Frame * f);
и вместо этого используйте С#:
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);