Я пытаюсь преобразовать структуру C в C # примерно так:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct Shader
{
public uint id;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Raylib.MAX_SHADER_LOCATIONS)]
public int[] locs;
}
И его аналог C:
typedef struct Shader {
unsigned int id; // Shader program id
int locs[MAX_SHADER_LOCATIONS]; // Shader locations array
} Shader;
MAX_SHADER_LOCATIONS - это константа, равная 32 в C и C #.
Это решение здесь такое же, как и у Marshaling C ++ struct с массивом фиксированного размера в C # .
Функция, которую я использую для проверки,
[DllImport(nativeLibName,CallingConvention = CallingConvention.Cdecl)]
public static extern Shader LoadShader(string vsFileName, string fsFileName);
И его аналог C:
Shader LoadShader(const char *vsFileName, const char *fsFileName)
Когда я пытаюсь использовать эту функцию, я получаю сообщение об ошибке «Сигнатура типа метода не совместима с PInvoke».Есть идеи, что я делаю не так?