我试图像这样将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不兼容”。知道我在做什么错吗?