配列フィールドは ByValArray または SafeArray と組で使用してください。
LPArrayのところで、全て同じエラーになる。
LPArrayをByValArrayに変えると、動くようになる。
読みこむだけなら、これで問題なさそうに思える。
この感じの行があると、マーシャリングができないようだ。 [MarshalAs(UnmanagedType.LPArray, SizeConst = 4)]
型 'System.TypeLoadException' のハンドルされていない例外が mscorlib.dll で発生しました 追加情報:型 'SharpFont.TrueType.Internal.HoriHeaderRec' の フィールド 'Reserved' をマーシャリングできません: 無効なマネージ/アンマネージ型の組み合わせです。 配列フィールドは ByValArray または SafeArray と組で使用してください。
namespace SharpFont.TrueType.Internal { [StructLayout(LayoutKind.Sequential)] internal class HoriHeaderRec { internal FT_Long Version; internal short Ascender; internal short Descender; internal short Line_Gap; internal ushort advance_Width_Max; internal short min_Left_Side_Bearing; internal short min_Right_Side_Bearing; internal short xMax_Extent; internal short caret_Slope_Rise; internal short caret_Slope_Run; internal short caret_Offset; [MarshalAs(UnmanagedType.LPArray, SizeConst = 4)] internal short[] Reserved; internal short metric_Data_Format; internal ushort number_Of_HMetrics; internal IntPtr long_metrics; internal IntPtr short_metrics; } }
typedef struct TT_HoriHeader_ { FT_Fixed Version; FT_Short Ascender; FT_Short Descender; FT_Short Line_Gap; FT_UShort advance_Width_Max; /* advance width maximum */ FT_Short min_Left_Side_Bearing; /* minimum left-sb */ FT_Short min_Right_Side_Bearing; /* minimum right-sb */ FT_Short xMax_Extent; /* xmax extents */ FT_Short caret_Slope_Rise; FT_Short caret_Slope_Run; FT_Short caret_Offset; FT_Short Reserved[4]; FT_Short metric_Data_Format; FT_UShort number_Of_HMetrics; /* The following fields are not defined by the TrueType specification */ /* but they are used to connect the metrics header to the relevant */ /* `HMTX' table. */ void* long_metrics; void* short_metrics; } TT_HoriHeader;