Выделение структуры C с массивом фиксированного размера в C # - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь преобразовать структуру 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».Есть идеи, что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...