Пример #1
0
        private static IntPtr RuntimeStartupCallback(object parameter, RuntimeStartupCallbackDelegate callback, out IntPtr nativeParameter)
        {
            NativeRuntimeStartupCallbackDelegate native = (IntPtr cordbg, IntPtr param, HResult hresult) => {
                GCHandle gch = GCHandle.FromIntPtr(param);
                callback(ICorDebug.Create(cordbg), gch.Target, hresult);
                gch.Free();
            };
            GCHandle gchParameter = GCHandle.Alloc(parameter);

            nativeParameter = GCHandle.ToIntPtr(gchParameter);
            return(Marshal.GetFunctionPointerForDelegate(native));
        }
Пример #2
0
        private static IntPtr RuntimeStartupCallback(object parameter, RuntimeStartupCallbackDelegate callback, out GCHandle nativeCallbackHandle, out IntPtr nativeParameter)
        {
            NativeRuntimeStartupCallbackDelegate native = (IntPtr cordbg, IntPtr param, HResult hresult) => {
                GCHandle gch = GCHandle.FromIntPtr(param);
                callback(ICorDebug.Create(cordbg), gch.Target, hresult);
                gch.Free();
            };

            // Need to keep native callback delegate alive until UnregisterForRuntimeStartup
            nativeCallbackHandle = GCHandle.Alloc(native);

            // Need to keep parameter alive until the callback is invoked
            GCHandle gchParameter = GCHandle.Alloc(parameter);

            nativeParameter = GCHandle.ToIntPtr(gchParameter);

            // Return the function pointer for the native callback
            return(Marshal.GetFunctionPointerForDelegate(native));
        }
Пример #3
0
        public static HResult RegisterForRuntimeStartupEx(int pid, string applicationGroupId, object parameter, out IntPtr unregisterToken, RuntimeStartupCallbackDelegate callback)
        {
            IntPtr nativeCallback = RuntimeStartupCallback(parameter, callback, out IntPtr nativeParameter);

            return(_registerForRuntimeStartupEx((uint)pid, applicationGroupId, nativeCallback, nativeParameter, out unregisterToken));
        }
Пример #4
0
        public static HResult RegisterForRuntimeStartup3(int pid, string applicationGroupId, object parameter, IntPtr libraryProvider, out IntPtr unregisterToken, RuntimeStartupCallbackDelegate callback)
        {
            if (_registerForRuntimeStartup3 == default)
            {
                throw new NotSupportedException("RegisterForRuntimeStartup3 not supported");
            }
            IntPtr nativeCallback = RuntimeStartupCallback(parameter, callback, out IntPtr nativeParameter);

            return(_registerForRuntimeStartup3((uint)pid, applicationGroupId, libraryProvider, nativeCallback, nativeParameter, out unregisterToken));
        }
Пример #5
0
        public static HResult RegisterForRuntimeStartupEx(int pid, string applicationGroupId, object parameter, out (IntPtr, GCHandle) unregister, RuntimeStartupCallbackDelegate callback)
        {
            IntPtr  nativeCallback = RuntimeStartupCallback(parameter, callback, out GCHandle nativeCallbackHandle, out IntPtr nativeParameter);
            HResult hr             = _registerForRuntimeStartupEx((uint)pid, applicationGroupId, nativeCallback, nativeParameter, out IntPtr unregisterToken);

            unregister = (unregisterToken, nativeCallbackHandle);
            return(hr);
        }
Пример #6
0
        public static HResult RegisterForRuntimeStartup(int pid, object parameter, out (IntPtr, GCHandle) unregister, RuntimeStartupCallbackDelegate callback)
        {
            IntPtr  nativeCallback = RuntimeStartupCallback(parameter, callback, out GCHandle gchNativeCallback, out IntPtr nativeParameter);
            HResult hr             = _registerForRuntimeStartup((uint)pid, nativeCallback, nativeParameter, out IntPtr unregisterToken);

            unregister = (unregisterToken, gchNativeCallback);
            return(hr);
        }