Created
July 9, 2019 15:26
-
-
Save knasa21/9bc20de6202bf31083daefcb49f0fdfd to your computer and use it in GitHub Desktop.
UnityでDLLを利用する際に配列をIntPtr型として管理しやすくするジェネリッククラス
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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