単なる memcpy のようなことを、アンマネージ領域で行いたいときの話です。
Marshal.Copy が一見できるかなと期待してしまうのですが、これはマネージド配列からアンマネージドのメモリへコピーするための関数です。(オーバーライドにより逆方向も可能になってます)。
しかしコピー元もコピー先もアンマネージドのオーバーライドはありません。
これをどうするかですが、 memcpy を使用するとちょっと大変なので Win32 API の力を借ります。
CopyMemory という関数が、 kernel32 に含まれているので、これを使います。
[DllImport("kernel32.dll")] public static extern void CopyMemory(IntPtr dest, IntPtr src, uint count);
memcpy を使おうとすると、 VCランタイムがインストール必須になってしまうのでこちらで。
コメント