@@ -147,9 +147,9 @@ public TypeLibWrapper GetVBEReferenceTypeLibByIndex(int index)
147
147
IntPtr referenceTypeLibPtr = target_IVBEProject . GetReferenceTypeLib ( index ) ;
148
148
if ( referenceTypeLibPtr == IntPtr . Zero )
149
149
{
150
- throw new ArgumentException ( "$ Reference TypeLib not available - probably a missing reference." ) ;
150
+ throw new ArgumentException ( "Reference TypeLib not available - probably a missing reference." ) ;
151
151
}
152
- return new TypeLibWrapper ( referenceTypeLibPtr ) ;
152
+ return new TypeLibWrapper ( referenceTypeLibPtr , isRefCountedInput : true ) ;
153
153
}
154
154
155
155
public TypeInfoReference GetVBEReferenceByGuid ( Guid referenceGuid )
@@ -202,7 +202,7 @@ public static TypeLibWrapper FromVBProject(IVBProject vbProject)
202
202
{
203
203
// Now we've got the references object, we can read the internal object structure to grab the ITypeLib
204
204
var internalReferencesObj = StructHelper . ReadComObjectStructure < VBEReferencesObj > ( references . Target ) ;
205
- return new TypeLibWrapper ( internalReferencesObj . TypeLib ) ;
205
+ return new TypeLibWrapper ( internalReferencesObj . TypeLib , isRefCountedInput : false ) ;
206
206
}
207
207
}
208
208
@@ -217,14 +217,14 @@ private void InitCommon()
217
217
/// Constructor
218
218
/// </summary>
219
219
/// <param name="rawObjectPtr">The raw unamanaged ITypeLib pointer</param>
220
- public TypeLibWrapper ( IntPtr rawObjectPtr )
220
+ public TypeLibWrapper ( IntPtr rawObjectPtr , bool isRefCountedInput )
221
221
{
222
222
if ( ! UnmanagedMemHelper . ValidateComObject ( rawObjectPtr ) )
223
223
{
224
224
throw new ArgumentException ( "Expected COM object, but validation failed." ) ;
225
225
} ;
226
226
target_ITypeLib = ( ComTypes . ITypeLib ) Marshal . GetObjectForIUnknown ( rawObjectPtr ) ;
227
- Marshal . Release ( rawObjectPtr ) ; // target_ITypeLib holds a reference to this now
227
+ if ( isRefCountedInput ) Marshal . Release ( rawObjectPtr ) ;
228
228
InitCommon ( ) ;
229
229
}
230
230
@@ -297,7 +297,7 @@ public bool CompileProject()
297
297
#if DEBUG
298
298
if ( e . HResult != ( int ) KnownComHResults . E_VBA_COMPILEERROR )
299
299
{
300
- // this is more for debug purposes, as we can probably just return false in future.
300
+ // this is for debug purposes, to see if the compiler ever returns other errors on failure
301
301
throw new ArgumentException ( "Unrecognised VBE compiler error: \n " + e . ToString ( ) ) ;
302
302
}
303
303
#endif
@@ -466,14 +466,8 @@ public void Dispose()
466
466
IEnumerator IEnumerable . GetEnumerator ( ) => this ;
467
467
public IEnumerator < TypeLibWrapper > GetEnumerator ( ) => this ;
468
468
469
- public IntPtr GetCurrentReference ( )
470
- {
471
- Marshal . AddRef ( _currentTypeLibPtr ) ;
472
- return _currentTypeLibPtr ;
473
- }
474
-
475
- TypeLibWrapper IEnumerator < TypeLibWrapper > . Current => new TypeLibWrapper ( GetCurrentReference ( ) ) ;
476
- object IEnumerator . Current => new TypeLibWrapper ( GetCurrentReference ( ) ) ;
469
+ TypeLibWrapper IEnumerator < TypeLibWrapper > . Current => new TypeLibWrapper ( _currentTypeLibPtr , isRefCountedInput : false ) ;
470
+ object IEnumerator . Current => new TypeLibWrapper ( _currentTypeLibPtr , isRefCountedInput : false ) ;
477
471
478
472
public void Reset ( ) // walk back to the first project in the chain
479
473
{
0 commit comments