Skip to content

Instantly share code, notes, and snippets.

@knasa21
Created July 9, 2019 15:26
Show Gist options
  • Save knasa21/9bc20de6202bf31083daefcb49f0fdfd to your computer and use it in GitHub Desktop.
Save knasa21/9bc20de6202bf31083daefcb49f0fdfd to your computer and use it in GitHub Desktop.
UnityでDLLを利用する際に配列をIntPtr型として管理しやすくするジェネリッククラス
using System;
using System.Runtime.InteropServices;
/// <summary>
/// 配列をメモリ確保してIntPtrで扱うためのジェネリククラス
/// </summary>
/// <typeparam name="T"></typeparam>
public class TemplateArrayPtr<T>
{
public T[] Array { get; set; }
public GCHandle Handle
{
get;
private set;
}
public IntPtr Ptr
{
get;
private set;
}
/// <summary>
/// メモリを固定して配列を生成
/// </summary>
/// <param name="size">配列サイズ</param>
public TemplateArrayPtr( int size )
{
Array = new T[size];
Handle = GCHandle.Alloc( Array, GCHandleType.Pinned );
Ptr = Handle.AddrOfPinnedObject();
}
/// <summary>
/// デストラクタ、固定したメモリの解放
/// </summary>
~TemplateArrayPtr()
{
// GC対象にする
Handle.Free();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment