コード例 #1
0
ファイル: GlyphCache.cs プロジェクト: yk2012985/wpf
        private unsafe void SendCallbackEntryPoint()
        {
            _createGlyphBitmapsCallbackDelegate = new CreateGlyphsCallbackDelegate(FontCacheAccessor.CreateGlyphsCallback);

            IntPtr fcn = Marshal.GetFunctionPointerForDelegate(_createGlyphBitmapsCallbackDelegate);

            _reversePInvokeWrapper = new SafeReversePInvokeWrapper(fcn);

            DUCE.MILCMD_GLYPHCACHE_SETCALLBACK cmd;
            cmd.Type   = MILCMD.MilCmdGlyphCacheSetCallback;
            cmd.Handle = Handle;

            // AddRef the reverse p-invoke wrapper while it is being transferred across the channel. There is a
            // small chance we would leak the wrapper. More specifically, if the app domain is shut down before
            // the wrapper is picked up by the composition engine.
            UnsafeNativeMethods.MILUnknown.AddRef(_reversePInvokeWrapper);
            cmd.CallbackPointer = (UInt64)_reversePInvokeWrapper.DangerousGetHandle();

            _channel.SendCommand((byte *)&cmd, sizeof(DUCE.MILCMD_GLYPHCACHE_SETCALLBACK), false /* sendInSeparateBatch */);
        }
コード例 #2
0
 internal static extern UInt32 AddRef(SafeReversePInvokeWrapper pIUnknown);