private static void ReadAsyncCallbackImpl(IntPtr ptr, Result result, IntPtr dataPtr, int dataLen) { GCHandle h = GCHandle.FromIntPtr(ptr); ReadAsyncHandler callback = (ReadAsyncHandler)h.Target; h.Free(); byte[] data = new byte[dataLen]; Marshal.Copy(dataPtr, data, 0, dataLen); callback(result, data); }
/// <summary> /// Reads data asynchronously from the game's allocated save file into a buffer. /// </summary> /// <param name="name"></param> /// <param name="callback"></param> public void ReadAsync(string name, ReadAsyncHandler callback) { GCHandle wrapped = GCHandle.Alloc(callback); Methods.ReadAsync(methodsPtr, name, GCHandle.ToIntPtr(wrapped), ReadAsyncCallbackImpl); }