C++で new し、C#側で一旦コピー、さらにC++で削除
hoge.h
#pragma once #define DLL_UNITY extern "C" __declspec(dllexport) typedef unsigned char byte ; DLL_UNITY void loadData (byte** data, int* dataSize); DLL_UNITY void freeData (byte** data);
hoge.cpp
#include "hoge.h" void loadData(byte** data, int* dataSize) { int s = 10; byte* d = new byte[size]; // ... *data = d; *dataSize = s; } void freeData(byte** data) { delete[] *data; *data = 0; }
MyData.cs
using UnityEngine; using System; using System.Runtime.InteropServices; public class MyData { [DllImport("libhoge")] public static extern void loadData (ref IntPtr data, ref int dataSize); public static void loadData (ref byte[] data) { IntPtr buff = IntPtr.Zero; int buffSize = 0; loadData(ref buff, ref buffSize); byte[] result = new byte[buffSize]; // コピーしてから使う Marshal.Copy(buff, result, 0, buffSize); freeData(ref buff); } [DllImport("libhoge")] public static extern void freeData(ref IntPtr data); }