示例#1
0
            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);
            }