public static IntPtr Alloc(IGRStream stream, bool writable) { var payloadSize = Marshaler.SizeOf <Payload>(); var retval = Marshal.AllocHGlobal(payloadSize); var self = StreamHolder.Instance.Register(stream); var payload = new Payload { Open = Methods.Instance.Open.Item1, Read = Methods.Instance.Read.Item1, Seek = Methods.Instance.Seek.Item1, Close = Methods.Instance.Close.Item1, Write = Methods.Instance.Write.Item1, StreamObjectRef = self }; Marshaler.StructureToPtr <Payload>(payload, retval, false); if (!writable) { Error_Control_Block ecb = new Error_Control_Block(); DocumentFiltersBase.Check(ISYS11df.IGR_Extend_Stream(retval, Methods.Instance.StreamCallback.Item1, retval, ref retval, ref ecb), ecb); } return(retval); }