int OleInterop.IDataObject.DAdvise(OleInterop.FORMATETC[] pFormatetc, uint ADVF, OleInterop.IAdviseSink pAdvSink, out uint pdwConnection) { if (null != oleData) { return(oleData.DAdvise(pFormatetc, ADVF, pAdvSink, out pdwConnection)); } // We have to call the method in the BCL version of the interface, so we need to // convert the parameters to the other type of structure. // As first make sure that the array contains exactly one element. if ((null == pFormatetc) || (pFormatetc.Length != 1)) { throw new ArgumentException(); } // Now convert the patameters BclComTypes.FORMATETC bclFormat = StructConverter.OleFormatETC2Bcl(ref pFormatetc[0]); BclComTypes.IAdviseSink bclSink = pAdvSink as BclComTypes.IAdviseSink; if (null == bclSink) { bclSink = new AdviseSink(pAdvSink); } int connection; int hr = bclData.DAdvise(ref bclFormat, (BclComTypes.ADVF)(ADVF), bclSink, out connection); pdwConnection = (uint)connection; return(hr); }
int BclComTypes.IEnumFORMATETC.Next(int celt, BclComTypes.FORMATETC[] rgelt, int[] pceltFetched) { if (null != bclEnum) { return(bclEnum.Next(celt, rgelt, pceltFetched)); } OleInterop.FORMATETC[] oleStat = new OleInterop.FORMATETC[celt]; uint[] fetched = new uint[1]; int hr = oleEnum.Next((uint)celt, oleStat, fetched); if (NativeMethods.Failed(hr)) { return(hr); } if (null != pceltFetched) { pceltFetched[0] = (int)fetched[0]; } for (uint i = 0; i < fetched[0]; i++) { rgelt[i] = StructConverter.OleFormatETC2Bcl(ref oleStat[i]); } return(hr); }
// ////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////// // OnDataChange // void IOleAdviseSink.OnDataChange(OleInterop.FORMATETC[] pFormatetc, OleInterop.STGMEDIUM[] pStgmed) { if (null != oleSink) { oleSink.OnDataChange(pFormatetc, pStgmed); } else { // In order to call the version of this interface defined in the BCL // each array must contain exactly one object. if ((null == pFormatetc) || (null == pStgmed)) { throw new ArgumentNullException(""); } if ((1 != pFormatetc.Length) || (1 != pStgmed.Length)) { throw new InvalidOperationException(); } // Convert the parameters BclComTypes.FORMATETC bclFormat = StructConverter.OleFormatETC2Bcl(ref pFormatetc[0]); BclComTypes.STGMEDIUM bclMedium = StructConverter.OleSTGMEDIUM2Bcl(ref pStgmed[0]); // Now we can call the method on the BCL interface bclSink.OnDataChange(ref bclFormat, ref bclMedium); // Now we have to copy the parameters back into the original structures. pFormatetc[0] = StructConverter.BclFormatETC2Ole(ref bclFormat); pStgmed[0] = StructConverter.BclSTGMEDIUM2Ole(ref bclMedium); } }
int OleInterop.IDataObject.QueryGetData(OleInterop.FORMATETC[] pFormatetc) { if (null != oleData) { return(oleData.QueryGetData(pFormatetc)); } if ((null == pFormatetc) || (1 != pFormatetc.Length)) { throw new ArgumentException(); } BclComTypes.FORMATETC bclFormat = StructConverter.OleFormatETC2Bcl(ref pFormatetc[0]); return(bclData.QueryGetData(ref bclFormat)); }
int BclComTypes.IDataObject.GetCanonicalFormatEtc(ref BclComTypes.FORMATETC formatIn, out BclComTypes.FORMATETC formatOut) { if (null != bclData) { return(bclData.GetCanonicalFormatEtc(ref formatIn, out formatOut)); } OleInterop.FORMATETC[] oleFormatIn = new OleInterop.FORMATETC[1]; OleInterop.FORMATETC[] oleFormatOut = new OleInterop.FORMATETC[1]; oleFormatIn[0] = StructConverter.BclFormatETC2Ole(ref formatIn); int hr = oleData.GetCanonicalFormatEtc(oleFormatIn, oleFormatOut); NativeMethods.ThrowOnFailure(hr); formatOut = StructConverter.OleFormatETC2Bcl(ref oleFormatOut[0]); return(hr); }
void OleInterop.IDataObject.SetData(OleInterop.FORMATETC[] pFormatetc, OleInterop.STGMEDIUM[] pmedium, int fRelease) { if (null != oleData) { oleData.SetData(pFormatetc, pmedium, fRelease); return; } if ((null == pFormatetc) || (1 != pFormatetc.Length) || (null == pmedium) || (1 != pmedium.Length)) { throw new ArgumentException(); } BclComTypes.FORMATETC bclFormat = StructConverter.OleFormatETC2Bcl(ref pFormatetc[0]); BclComTypes.STGMEDIUM bclMedium = StructConverter.OleSTGMEDIUM2Bcl(ref pmedium[0]); bclData.SetData(ref bclFormat, ref bclMedium, (fRelease == 0) ? false : true); }
void OleInterop.IDataObject.GetDataHere(OleInterop.FORMATETC[] pFormatetc, OleInterop.STGMEDIUM[] pRemoteMedium) { if (null != oleData) { oleData.GetDataHere(pFormatetc, pRemoteMedium); return; } // Check that the arrays are not null and with only one element. if ((null == pFormatetc) || (pFormatetc.Length != 1) || (null == pRemoteMedium) || (pRemoteMedium.Length != 1)) { throw new ArgumentException(); } // Call the method on the BCL interface BclComTypes.FORMATETC bclFormat = StructConverter.OleFormatETC2Bcl(ref pFormatetc[0]); BclComTypes.STGMEDIUM bclMedium = StructConverter.OleSTGMEDIUM2Bcl(ref pRemoteMedium[0]); bclData.GetDataHere(ref bclFormat, ref bclMedium); pRemoteMedium[0] = StructConverter.BclSTGMEDIUM2Ole(ref bclMedium); }
int OleInterop.IDataObject.GetCanonicalFormatEtc(OleInterop.FORMATETC[] pformatectIn, OleInterop.FORMATETC[] pformatetcOut) { if (null != oleData) { return(oleData.GetCanonicalFormatEtc(pformatectIn, pformatetcOut)); } // Check that the arrays are not null and with only one element. if ((null == pformatectIn) || (pformatectIn.Length != 1) || (null == pformatetcOut) || (pformatetcOut.Length != 1)) { throw new ArgumentException(); } BclComTypes.FORMATETC bclFormatIn = StructConverter.OleFormatETC2Bcl(ref pformatectIn[0]); BclComTypes.FORMATETC bclFormatOut; int hr = bclData.GetCanonicalFormatEtc(ref bclFormatIn, out bclFormatOut); NativeMethods.ThrowOnFailure(hr); pformatetcOut[0] = StructConverter.BclFormatETC2Ole(ref bclFormatOut); return(hr); }