Skip to content

Commit e2cf4c9

Browse files
committed
Fix RCW error (ReleaseComObject only if loaded by Add-in)
1 parent 50be7ab commit e2cf4c9

File tree

10 files changed

+18
-16
lines changed

10 files changed

+18
-16
lines changed

access-add-in/AccUnitLoader.accda

16 KB
Binary file not shown.

access-add-in/source/modules/_config_Application.bas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Option Compare Text
1818
Option Explicit
1919

2020
'Version number
21-
Private Const APPLICATION_VERSION As String = "0.9.800.240510"
21+
Private Const APPLICATION_VERSION As String = "0.9.1000.240519"
2222

2323
Private Const APPLICATION_NAME As String = "ACLib AccUnit Loader"
2424
Private Const APPLICATION_FULLNAME As String = "Access Code Library - AccUnit Loader"

excel-add-in/AccUnitLoader.xlam

-8.08 KB
Binary file not shown.
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

excel-add-in/source/config_Application.bas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Option Explicit
1919
Option Private Module
2020

2121
'Version number
22-
Private Const APPLICATION_VERSION As String = "0.9.900.2400512"
22+
Private Const APPLICATION_VERSION As String = "0.9.1000.240519"
2323

2424
Private Const APPLICATION_NAME As String = "ACLib AccUnit Loader"
2525
Private Const APPLICATION_FULLNAME As String = "Access Code Library - AccUnit Loader"

source/Common/Common.VBIDETools/AccessApplicationHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ public enum AcCommand { AcCmdCompileAndSaveAllModules = 126 };
2525

2626
public enum AcObjectType { AcDefault = -1, AcTable = 0, AcQuery = 1, AcForm = 2, AcReport = 3, AcMacro = 4, AcModule = 5 };
2727

28-
public AccessApplicationHelper(object application)
29-
: base(application)
28+
public AccessApplicationHelper(object application, bool releaseApplicationComObjectOnDispose = false)
29+
: base(application, releaseApplicationComObjectOnDispose)
3030
{
3131
}
3232

source/Common/Common.VBIDETools/Integration/HostApplicationTools.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ private static Type GetAccessApplicationTypeForComObject(object accessComObject)
8787
}
8888
}
8989

90-
public static OfficeApplicationHelper GetOfficeApplicationHelper(VBE vbe, ref object hostApplication)
90+
public static OfficeApplicationHelper GetOfficeApplicationHelper(VBE vbe, ref object hostApplication, bool releaseApplicationComObjectOnDispose = false)
9191
{
9292
using (new BlockLogger())
9393
{
@@ -101,19 +101,19 @@ public static OfficeApplicationHelper GetOfficeApplicationHelper(VBE vbe, ref ob
101101
isAccessApplication = GetAccessApplicationTypeForComObject(hostApplication) != null;
102102
}
103103

104-
return hostApplication is null ? new VbeOnlyApplicatonHelper(vbe) : GetOfficeApplicationHelper(hostApplication, isAccessApplication);
104+
return hostApplication is null ? new VbeOnlyApplicatonHelper(vbe) : GetOfficeApplicationHelper(hostApplication, isAccessApplication, releaseApplicationComObjectOnDispose);
105105
}
106106
}
107107

108-
private static OfficeApplicationHelper GetOfficeApplicationHelper(object hostApplication, bool isAccessApplication)
108+
private static OfficeApplicationHelper GetOfficeApplicationHelper(object hostApplication, bool isAccessApplication, bool releaseApplicationComObjectOnDispose)
109109
{
110110
using (new BlockLogger())
111111
{
112112
OfficeApplicationHelper applicationHelper;
113113
if (isAccessApplication)
114114
{
115115
Logger.Log("Access application");
116-
applicationHelper = new AccessApplicationHelper(hostApplication);
116+
applicationHelper = new AccessApplicationHelper(hostApplication, releaseApplicationComObjectOnDispose);
117117
}
118118
else
119119
{

source/Common/Common.VBIDETools/OfficeApplicationHelper.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class OfficeApplicationHelper : IOfficeApplicationHelper, IDisposable
2222
{
2323
private object _application;
2424
private InvocationHelper _invocationHelper;
25+
private bool _releaseApplicationComObjectOnDispose;
2526

2627
public object Application { get { return _application; } }
2728
protected InvocationHelper InvocationHelper { get { return _invocationHelper; } }
@@ -38,10 +39,11 @@ public string Name
3839
}
3940
}
4041

41-
public OfficeApplicationHelper(object application)
42+
public OfficeApplicationHelper(object application, bool releaseApplicationComObjectOnDispose = false)
4243
{
4344
_application = application ?? throw new ArgumentNullException();
4445
_invocationHelper = new InvocationHelper(application);
46+
_releaseApplicationComObjectOnDispose = releaseApplicationComObjectOnDispose;
4547
}
4648

4749
public virtual VBE VBE
@@ -140,7 +142,10 @@ protected virtual void Dispose(bool disposing)
140142

141143
if (_application != null)
142144
{
143-
Marshal.ReleaseComObject(_application);
145+
if (_releaseApplicationComObjectOnDispose)
146+
{
147+
Marshal.ReleaseComObject(_application);
148+
}
144149
_application = null;
145150
}
146151

@@ -150,13 +155,11 @@ protected virtual void Dispose(bool disposing)
150155
Logger.Log(ex.Message);
151156
}
152157

153-
// GC-Bereinigung wegen unmanaged res:
154-
/*
158+
// GC clean up
155159
GC.Collect();
156160
GC.WaitForPendingFinalizers();
157161
GC.Collect();
158162
GC.WaitForPendingFinalizers();
159-
*/
160163
_disposed = true;
161164
}
162165

vbe-add-In/AccUnit.VbeAddIn/AddInManager.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ public AddInManager(AddIn addIn)
4848

4949
/*
5050
_tagListManager.AddIn = addIn;
51-
_testListAndResultManager.AddIn = addIn;
5251
*/
5352

5453
InitOfficeApplicationHelper();
@@ -266,8 +265,8 @@ private void InitOfficeApplicationHelper(object hostApplication = null)
266265
{
267266
using (new BlockLogger())
268267
{
269-
// Note: if load RubberDuck, an instance of Access stay in memory after close
270-
_officeApplicationHelper = HostApplicationTools.GetOfficeApplicationHelper(VBE, ref hostApplication);
268+
// Note: if load RubberDuck, an instance of Access stay in memory after close => HostApplicationTools.GetOfficeApplicationHelper(..., ..., true);
269+
_officeApplicationHelper = HostApplicationTools.GetOfficeApplicationHelper(VBE, ref hostApplication, true);
271270
_vbeIntegrationManager.OfficeApplicationHelper = _officeApplicationHelper;
272271
_testSuiteManager.OfficeApplicationHelper = _officeApplicationHelper;
273272
}

0 commit comments

Comments
 (0)