diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 525cfcb..7b7a5e2 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -33,6 +33,6 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.1.0.0")] -[assembly: AssemblyFileVersion("1.1.0.0")] +[assembly: AssemblyVersion("1.2.0.0")] +[assembly: AssemblyFileVersion("1.2.0.0")] diff --git a/ThisAddIn.cs b/ThisAddIn.cs index 9ad4aba..786e27c 100644 --- a/ThisAddIn.cs +++ b/ThisAddIn.cs @@ -31,6 +31,7 @@ public partial class ThisAddIn { const int SW_MINIMIZE = 6; IntPtr _hWnd = IntPtr.Zero, _scProc = IntPtr.Zero; + SubclassProc _scDelegate; GCHandle _gch; IntPtr MySubclassProc(IntPtr hWnd, uint uMsg, UIntPtr wParam, IntPtr lParam, UIntPtr uIdSubclass, UIntPtr dwRefData) { @@ -47,12 +48,15 @@ private void ThisAddIn_Startup(object sender, System.EventArgs e) { // before our module is unloaded to avoid crashes ((Outlook.ApplicationEvents_11_Event)Application).Quit += ThisAddIn_Quit; if (((IOleWindow)Application.ActiveExplorer()).GetWindow(out _hWnd) == S_OK && _hWnd != IntPtr.Zero) { - _gch = GCHandle.Alloc(this); - _scProc = Marshal.GetFunctionPointerForDelegate((SubclassProc)MySubclassProc); + _scDelegate = new SubclassProc(MySubclassProc); + _gch = GCHandle.Alloc(_scProc); + _scProc = Marshal.GetFunctionPointerForDelegate(_scDelegate); if (SetWindowSubclass(_hWnd, _scProc, UIntPtr.Zero, UIntPtr.Zero)) { return; } + _scProc = IntPtr.Zero; _gch.Free(); + _scDelegate = null; } _hWnd = IntPtr.Zero; } @@ -60,8 +64,10 @@ private void ThisAddIn_Startup(object sender, System.EventArgs e) { private void ThisAddIn_Quit() { if (_hWnd != IntPtr.Zero) { RemoveWindowSubclass(_hWnd, _scProc, UIntPtr.Zero); - _hWnd = IntPtr.Zero; + _scProc = IntPtr.Zero; _gch.Free(); + _scDelegate = null; + _hWnd = IntPtr.Zero; } }