のねのBlog

パソコンやソフト開発で起きた問題など書きます。よろしくお願いします。

配列フィールドは 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;