Итак, было много вариантов этого вопроса, и, просмотрев несколько, я до сих пор не могу понять.
Это код C:< /p>
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);
Подробнее здесь: https://stackoverflow.com/questions/103 ... char-array
C# вызывает функцию C, которая возвращает структуру с массивом символов фиксированного размера ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
C# вызывает функцию C, которая возвращает структуру с массивом символов фиксированного размера
Anonymous » » в форуме C# - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-