Exemple #1
0
            static ManagedToNativeWrapper()
            {
                EventHandler onShutdown;
                AppDomain    currentDomain;
                IStreamVtbl  newVtable;

                onShutdown    = new EventHandler(OnShutdown);
                currentDomain = AppDomain.CurrentDomain;
                currentDomain.DomainUnload += onShutdown;
                currentDomain.ProcessExit  += onShutdown;

                newVtable = new IStreamVtbl();
                newVtable.QueryInterface = new QueryInterfaceDelegate(QueryInterface);
                newVtable.AddRef         = new AddRefDelegate(AddRef);
                newVtable.Release        = new ReleaseDelegate(Release);
                newVtable.Read           = new ReadDelegate(Read);
                newVtable.Write          = new WriteDelegate(Write);
                newVtable.Seek           = new SeekDelegate(Seek);
                newVtable.SetSize        = new SetSizeDelegate(SetSize);
                newVtable.CopyTo         = new CopyToDelegate(CopyTo);
                newVtable.Commit         = new CommitDelegate(Commit);
                newVtable.Revert         = new RevertDelegate(Revert);
                newVtable.LockRegion     = new LockRegionDelegate(LockRegion);
                newVtable.UnlockRegion   = new UnlockRegionDelegate(UnlockRegion);
                newVtable.Stat           = new StatDelegate(Stat);
                newVtable.Clone          = new CloneDelegate(Clone);
                managedVtable            = newVtable;

                CreateVtable();
            }
Exemple #2
0
 private NativeToManagedWrapper(IntPtr comInterface, bool outParam)
 {
     this.comInterface = comInterface;
     managedVtable     = (IStreamVtbl)Marshal.PtrToStructure(Marshal.ReadIntPtr(comInterface), typeof(IStreamVtbl));
     if (!outParam)
     {
         managedVtable.AddRef(comInterface);
     }
 }
Exemple #3
0
 private void Dispose(bool disposing)
 {
     managedVtable.Release(comInterface);
     if (disposing)
     {
         comInterface  = IntPtr.Zero;
         managedVtable = null;
         GC.SuppressFinalize(this);
     }
 }
Exemple #4
0
        private static ComInterfaceEntry *InitializeIStreamEntry()
        {
            GetIUnknownImpl(out IntPtr fpQueryInterface, out IntPtr fpAddRef, out IntPtr fpRelease);

            IntPtr iStreamVtbl = IStreamVtbl.Create(fpQueryInterface, fpAddRef, fpRelease);

            ComInterfaceEntry *wrapperEntry = (ComInterfaceEntry *)RuntimeHelpers.AllocateTypeAssociatedMemory(typeof(WinFormsComWrappers), sizeof(ComInterfaceEntry));

            wrapperEntry->IID    = IID.IStream;
            wrapperEntry->Vtable = iStreamVtbl;
            return(wrapperEntry);
        }
Exemple #5
0
			private void Dispose(bool disposing)
			{
				managedVtable.Release(comInterface);
				if (disposing)
				{
					comInterface = IntPtr.Zero;
					managedVtable = null;
					GC.SuppressFinalize(this);
				}
			}
Exemple #6
0
			private NativeToManagedWrapper(IntPtr comInterface, bool outParam)
			{
				this.comInterface = comInterface;
				managedVtable = (IStreamVtbl)Marshal.PtrToStructure(Marshal.ReadIntPtr(comInterface), typeof(IStreamVtbl));
				if (!outParam)
					managedVtable.AddRef(comInterface);
			}
Exemple #7
0
			static ManagedToNativeWrapper()
			{
				EventHandler onShutdown;
				AppDomain currentDomain;
				IStreamVtbl newVtable;

				onShutdown = new EventHandler(OnShutdown);
				currentDomain = AppDomain.CurrentDomain;
				currentDomain.DomainUnload += onShutdown;
				currentDomain.ProcessExit += onShutdown;

				newVtable = new IStreamVtbl();
				newVtable.QueryInterface = new QueryInterfaceDelegate(QueryInterface);
				newVtable.AddRef = new AddRefDelegate(AddRef);
				newVtable.Release = new ReleaseDelegate(Release);
				newVtable.Read = new ReadDelegate(Read);
				newVtable.Write = new WriteDelegate(Write);
				newVtable.Seek = new SeekDelegate(Seek);
				newVtable.SetSize = new SetSizeDelegate(SetSize);
				newVtable.CopyTo = new CopyToDelegate(CopyTo);
				newVtable.Commit = new CommitDelegate(Commit);
				newVtable.Revert = new RevertDelegate(Revert);
				newVtable.LockRegion = new LockRegionDelegate(LockRegion);
				newVtable.UnlockRegion = new UnlockRegionDelegate(UnlockRegion);
				newVtable.Stat = new StatDelegate(Stat);
				newVtable.Clone = new CloneDelegate(Clone);
				managedVtable = newVtable;

				CreateVtable();
			}