将具有固定大小的数组的C结构编组为C#

时间:2018-10-12 10:51:12

标签: c# arrays marshalling fixed-width

我试图像这样将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是在C和C#中均设置为32的常量。

此解决方案与此Marshaling C++ struct with fixed size array into 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不兼容”。知道我在做什么错吗?

0 个答案:

没有答案