タグ

ブックマーク / schima.hatenablog.com (4)

  • ポインタ(バイト配列)から構造体への変換 - schima.hatenablog.com

    前回の記事の逆変換の場合を考えていきます。基的に、ポインタに変換するよりはコーディングは楽です。 なお、今回変換する構造体と、その構造体のデータが入ったポインタ(IntPtr)は以下のようなものとします。 [StructLayout(LayoutKind.Sequential)] struct Fuga { public double A; public double B; public double C; } Fuga fuga = new Fuga { A = 1.23, B = 4.56, C = 7.89 }; IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(fuga)); Marshal.StructureToPtr(fuga, ptr, false); なおバイト配列の場合は、Marshal.Copyするなり、GCHandle

    ポインタ(バイト配列)から構造体への変換 - schima.hatenablog.com
  • メンバに配列を持つ構造体のマーシャリング - schima.hatenablog.com

    コメントにご質問があったので、少し長くなりそうなのでこちらで書かせてもらいます。 構造体とポインタ(若しくはバイト配列)との相互変換を行う方法については以前紹介しましたが、あの時の例はあえてごく簡単な構造体にしてありました。今回はメンバとして配列をもっている構造体の場合について考えます。ここでは、以下のような構造体を例にとりご説明します。 [StructLayout(LayoutKind.Sequential)] struct Hoge { public string Str; public double[] Array; public Fuga[] Fugafuga; } [StructLayout(LayoutKind.Sequential)] struct Fuga { public int X; public int Y; public Fuga(int x, int y) { X

    メンバに配列を持つ構造体のマーシャリング - schima.hatenablog.com
  • 構造体からポインタ(バイト配列)への変換 - schima.hatenablog.com

    色々方法はあります。これから、思いついたものを列挙していきます。 なお、今回変換する構造体とそのインスタンスは以下のようなものとします。 [StructLayout(LayoutKind.Sequential)] struct Hoge { public int A; public int B; } Hoge obj = new Hoge{ A = 12345, B = 67890 }; Test1 : Marshal.StructureToPtr そのものズバリなメソッドです。予め確保しておいたメモリに構造体のデータをコピーします。 int size = Marshal.SizeOf(obj); IntPtr ptr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(obj, ptr, false); また、ポインタではなくbyte

    構造体からポインタ(バイト配列)への変換 - schima.hatenablog.com
  • Schimaの日記

    前回の記事に続いて、今度は「遠征」に要する時間を探ります。記事書くの疲れるのであっさりと。 schima.hatenablog.com ℹ️注意 記事の内容は、ゲーム攻略にはほとんど価値がないと思います。純粋な興味と、調査にあたって要した技術的知見のメモが目的です。 記事にはゲーム中のスクリーンショットが含まれます。以下ガイドラインに沿います。https://www.gamecity.ne.jp/info/videopolicy.html 数学的その他で用語がおかしければすみません。 距離と時間の関係 横軸を遠征先までの距離(m)、縦軸を所要時間(秒)としたときのグラフが以下です。 「信長の野望 出陣」遠征先の距離と所要時間 秒だとわかりにくいですが、以下の傾向が読み取れます。 距離がほぼ0mでも最短2時間は要する およそ11km、45kmで傾向が変わる 11kmまでは急激に時間が増し

    Schimaの日記
  • 1