/
IVBETypeLibsAPI.cs
636 lines (564 loc) · 43.3 KB
/
IVBETypeLibsAPI.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
using System;
using System.Collections.Generic;
using Rubberduck.VBEditor.ComManagement.TypeLibs;
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
namespace Rubberduck.VBEditor.ComManagement.TypeLibsAPI
{
public interface IVBETypeLibsAPI
{
/// <summary>
/// Compile an entire VBE project
/// </summary>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">The VBA project name</param>
/// <returns>bool indicating success/failure</returns>
bool CompileProject(IVBE ide, string projectName);
/// <summary>
/// Compile an entire VBA project
/// </summary>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <returns>bool indicating success/failure.</returns>
bool CompileProject(IVBProject project);
/// <summary>
/// Compile an entire VBA project
/// </summary>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <returns>bool indicating success/failure</returns>
bool CompileProject(TypeLibWrapper projectTypeLib);
/// <summary>
/// Compile a single VBA component (e.g. module/class)
/// </summary>
/// <remarks>NOTE: This will only return success if ALL components that this component depends on also compile successfully</remarks>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">The VBA project name</param>
/// <param name="componentName">The name of the component (module/class etc) to compile</param>
/// <returns>bool indicating success/failure.</returns>
bool CompileComponent(IVBE ide, string projectName, string componentName);
/// <summary>
/// Compile a single VBA component (e.g. module/class)
/// </summary>
/// <remarks>NOTE: This will only return success if ALL components that this component depends on also compile successfully</remarks>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <param name="componentName">The name of the component (module/class etc) to compile</param>
/// <returns>bool indicating success/failure.</returns>
bool CompileComponent(IVBProject project, string componentName);
/// <summary>
/// Compile a single VBA component (e.g. module/class)
/// </summary>
/// <remarks>NOTE: This will only return success if ALL components that this component depends on also compile successfully</remarks>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <param name="componentName">The name of the component (module/class etc) to compile</param>
/// <returns>bool indicating success/failure.</returns>
bool CompileComponent(TypeLibWrapper projectTypeLib, string componentName);
/// <summary>
/// Compile a single VBA component (e.g. module/class)
/// </summary>
/// <remarks>NOTE: This will only return success if ALL components that this component depends on also compile successfully</remarks>
/// <param name="component">Safe-com wrapper representing the VBA component to compile</param>
/// <returns>bool indicating success/failure.</returns>
bool CompileComponent(IVBComponent component);
/// <summary>
/// Compile a single VBA component (e.g. module/class)
/// </summary>
/// <remarks>NOTE: This will only return success if ALL components that this component depends on also compile successfully</remarks>
/// <param name="componentTypeInfo">Low-level ITypeInfo wrapper representing the VBA component to compile</param>
/// <returns>bool indicating success/failure.</returns>
bool CompileComponent(TypeInfoWrapper componentTypeInfo);
/// <summary>
/// Execute a routine inside a standard VBA code module
/// </summary>
/// <remarks>the VBA return value returned here can be a COM object, but needs freeing with Marshal.ReleaseComObject to ensure deterministic behaviour.</remarks>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">VBA Project name, as declared in the VBE</param>
/// <param name="standardModuleName">Module name, as declared in the VBA project</param>
/// <param name="procName">Procedure name, as declared in the VBA module</param>
/// <param name="args">optional array of arguments to pass to the VBA routine</param>
/// <returns>object representing the VBA return value, if one was provided, or null otherwise.</returns>
object ExecuteCode(IVBE ide, string projectName, string standardModuleName, string procName, object[] args = null);
/// <summary>
/// Execute a routine inside a standard VBA code module
/// </summary>
/// <remarks>the VBA return value returned here can be a COM object, but needs freeing with Marshal.ReleaseComObject to ensure deterministic behaviour.</remarks>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <param name="standardModuleName">Module name, as declared in the VBA project</param>
/// <param name="procName">Procedure name, as declared in the VBA module</param>
/// <param name="args">optional array of arguments to pass to the VBA routine</param>
/// <returns>object representing the VBA return value, if one was provided, or null otherwise.</returns>
object ExecuteCode(IVBProject project, string standardModuleName, string procName, object[] args = null);
/// <summary>
/// Execute a routine inside a standard VBA code module
/// </summary>
/// <remarks>the VBA return value returned here can be a COM object, but needs freeing with Marshal.ReleaseComObject to ensure deterministic behaviour.</remarks>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project which contains the routine</param>
/// <param name="standardModuleName">Module name, as declared in the VBA project</param>
/// <param name="procName">Procedure name, as declared in the VBA module</param>
/// <param name="args">optional array of arguments to pass to the VBA routine</param>
/// <returns>object representing the VBA return value, if one was provided, or null otherwise.</returns>
object ExecuteCode(TypeLibWrapper projectTypeLib, string standardModuleName, string procName, object[] args = null);
/// <summary>
/// Execute a routine inside a standard VBA code module
/// </summary>
/// <remarks>the VBA return value returned here can be a COM object, but needs freeing with Marshal.ReleaseComObject to ensure deterministic behaviour.</remarks>
/// <param name="component">Safe-com wrapper representing the VBA component where the routine is defined</param>
/// <param name="procName">Procedure name, as declared in the VBA module</param>
/// <param name="args">optional array of arguments to pass to the VBA routine</param>
/// <returns>object representing the VBA return value, if one was provided, or null otherwise.</returns>
object ExecuteCode(IVBComponent component, string procName, object[] args = null);
/// <summary>
/// Execute a routine inside a standard VBA code module
/// </summary>
/// <remarks>the VBA return value returned here can be a COM object, but needs freeing with Marshal.ReleaseComObject to ensure deterministic behaviour.</remarks>
/// <param name="standardModuleTypeInfo">Low-level ITypeInfo wrapper representing the VBA component which contains the routine</param>
/// <param name="procName">Procedure name, as declared in the VBA module</param>
/// <param name="args">optional array of arguments to pass to the VBA routine</param>
/// <returns>object representing the VBA return value, if one was provided, or null otherwise.</returns>
object ExecuteCode(TypeInfoWrapper standardModuleTypeInfo, string procName, object[] args = null);
/// <summary>
/// Retrieves the developer-defined conditional compilation arguments of a VBA project
/// </summary>
/// <remarks>does not expose compiler-defined arguments, such as WIN64, VBA7 etc, which must be determined via the running process</remarks>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">VBA Project name, as declared in the VBE</param>
/// <returns>returns the raw unparsed conditional arguments string, e.g. "foo = 1 : bar = 2"</returns>
string GetProjectConditionalCompilationArgsRaw(IVBE ide, string projectName);
/// <summary>
/// Retrieves the developer-defined conditional compilation arguments of a VBA project
/// </summary>
/// <remarks>does not expose compiler-defined arguments, such as WIN64, VBA7 etc, which must be determined via the running process</remarks>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <returns>returns the raw unparsed conditional arguments string, e.g. "foo = 1 : bar = 2"</returns>
string GetProjectConditionalCompilationArgsRaw(IVBProject project);
/// <summary>
/// Retrieves the developer-defined conditional compilation arguments of a VBA project
/// </summary>
/// <remarks>does not expose compiler-defined arguments, such as WIN64, VBA7 etc, which must be determined via the running process</remarks>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <returns>returns the raw unparsed conditional arguments string, e.g. "foo = 1 : bar = 2"</returns>
string GetProjectConditionalCompilationArgsRaw(TypeLibWrapper projectTypeLib);
/// <summary>
/// Retrieves the developer-defined conditional compilation arguments of a VBA project
/// </summary>
/// <remarks>does not expose compiler-defined arguments, such as WIN64, VBA7 etc, which must be determined via the running process</remarks>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">VBA Project name, as declared in the VBE</param>
/// <returns>returns a Dictionary<string, short>, parsed from the conditional arguments string</returns>
Dictionary<string, short> GetProjectConditionalCompilationArgs(IVBE ide, string projectName);
/// <summary>
/// Retrieves the developer-defined conditional compilation arguments of a VBA project
/// </summary>
/// <remarks>does not expose compiler-defined arguments, such as WIN64, VBA7 etc, which must be determined via the running process</remarks>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <returns>returns a Dictionary<string, short>, parsed from the conditional arguments string</returns>
Dictionary<string, short> GetProjectConditionalCompilationArgs(IVBProject project);
/// <summary>
/// Retrieves the developer-defined conditional compilation arguments of a VBA project
/// </summary>
/// <remarks>does not expose compiler-defined arguments, such as WIN64, VBA7 etc, which must be determined via the running process</remarks>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <returns>returns a Dictionary<string, short>, parsed from the conditional arguments string</returns>
Dictionary<string, short> GetProjectConditionalCompilationArgs(TypeLibWrapper projectTypeLib);
/// <summary>
/// Sets the developer-defined conditional compilation arguments of a VBA project
/// </summary>
/// <remarks>don't set compiler-defined arguments, such as WIN64, VBA7 etc</remarks>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">VBA Project name, as declared in the VBE</param>
/// <param name="newConditionalArgs">Raw string representing the arguments, e.g. "foo = 1 : bar = 2"</param>
void SetProjectConditionalCompilationArgsRaw(IVBE ide, string projectName, string newConditionalArgs);
/// <summary>
/// Sets the developer-defined conditional compilation arguments of a VBA project
/// </summary>
/// <remarks>don't set compiler-defined arguments, such as WIN64, VBA7 etc</remarks>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <param name="newConditionalArgs">Raw string representing the arguments, e.g. "foo = 1 : bar = 2"</param>
void SetProjectConditionalCompilationArgsRaw(IVBProject project, string newConditionalArgs);
/// <summary>
/// Sets the developer-defined conditional compilation arguments of a VBA project
/// </summary>
/// <remarks>don't set compiler-defined arguments, such as WIN64, VBA7 etc</remarks>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <param name="newConditionalArgs">Raw string representing the arguments, e.g. "foo = 1 : bar = 2"</param>
void SetProjectConditionalCompilationArgsRaw(TypeLibWrapper projectTypeLib, string newConditionalArgs);
/// <summary>
/// Sets the developer-defined conditional compilation arguments of a VBA project
/// </summary>
/// <remarks>don't set compiler-defined arguments, such as WIN64, VBA7 etc</remarks>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">VBA Project name, as declared in the VBE</param>
/// <param name="newConditionalArgs">Dictionary<string, short> representing the argument name-value pairs</param>
void SetProjectConditionalCompilationArgs(IVBE ide, string projectName, Dictionary<string, short> newConditionalArgs);
/// <summary>
/// Sets the developer-defined conditional compilation arguments of a VBA project
/// </summary>
/// <remarks>don't set compiler-defined arguments, such as WIN64, VBA7 etc</remarks>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <param name="newConditionalArgs">Dictionary<string, short> representing the argument name-value pairs</param>
void SetProjectConditionalCompilationArgs(IVBProject project, Dictionary<string, short> newConditionalArgs);
/// <summary>
/// Sets the developer-defined conditional compilation arguments of a VBA project
/// </summary>
/// <remarks>don't set compiler-defined arguments, such as WIN64, VBA7 etc</remarks>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <param name="newConditionalArgs">Dictionary<string, short> representing the argument name-value pairs</param>
void SetProjectConditionalCompilationArgs(TypeLibWrapper projectTypeLib, Dictionary<string, short> newConditionalArgs);
/// <summary>
/// Determines whether the specified document class is a known document class type (e.g. Excel._Workbook, Access._Form)
/// </summary>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">VBA Project name, as declared in the VBE</param>
/// <param name="className">The name of the class document, as defined in the VBA project</param>
/// <returns>DocClassType indicating the type of the document class module, or DocType.Unrecognized</returns>
DocClassType DetermineDocumentClassType(IVBE ide, string projectName, string className);
/// <summary>
/// Determines whether the specified document class is a known document class type (e.g. Excel._Workbook, Access._Form)
/// </summary>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <param name="className">The name of the class document, as defined in the VBA project</param>
/// <returns>DocClassType indicating the type of the document class module, or DocType.Unrecognized</returns>
DocClassType DetermineDocumentClassType(TypeLibWrapper projectTypeLib, string className);
/// <summary>
/// Determines whether the specified document class is a known document class type (e.g. Excel._Workbook, Access._Form)
/// </summary>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <param name="className">The name of the class document, as defined in the VBA project</param>
/// <returns>DocClassType indicating the type of the document class module, or DocType.Unrecognized</returns>
DocClassType DetermineDocumentClassType(IVBProject project, string className);
/// <summary>
/// Determines whether the specified document class is a known document class type (e.g. Excel._Workbook, Access._Form)
/// </summary>
/// <param name="project">Safe-com wrapper representing the VBA component</param>
/// <returns>DocClassType indicating the type of the document class module, or DocType.Unrecognized</returns>
DocClassType DetermineDocumentClassType(IVBComponent component);
/// <summary>
/// Determines whether the specified document class is a known document class type (e.g. Excel._Workbook, Access._Form)
/// </summary>
/// <param name="classTypeInfo">Low-level ITypeInfo wrapper representing the VBA project</param>
/// <returns>DocClassType indicating the type of the document class module, or DocType.Unrecognized</returns>
DocClassType DetermineDocumentClassType(TypeInfoWrapper classTypeInfo);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">VBA Project name, as declared in the VBE</param>
/// <param name="className">Document class name, as declared in the VBA project</param>
/// <param name="interfaceProgID">The interface name, preceeded by the library container name, e.g. "Excel._Worksheet"</param>
/// <returns>bool indicating whether the class does inherit the specified interface</returns>
bool DoesClassImplementInterface(IVBE ide, string projectName, string className, string interfaceProgID);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="project">Safe-com wrapper representing the VBE project</param>
/// <param name="className">Document class name, as declared in the VBA project</param>
/// <param name="interfaceProgID">The interface name, preceeded by the library container name, e.g. "Excel._Worksheet"</param>
/// <returns>bool indicating whether the class does inherit the specified interface</returns>
bool DoesClassImplementInterface(IVBProject project, string className, string interfaceProgID);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <param name="className">Document class name, as declared in the VBA project</param>
/// <param name="interfaceProgID">The interface name, preceeded by the library container name, e.g. "Excel._Worksheet"</param>
/// <returns>bool indicating whether the class does inherit the specified interface</returns>
bool DoesClassImplementInterface(TypeLibWrapper projectTypeLib, string className, string interfaceProgID);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="component">Safe-com wrapper representing the VBA component</param>
/// <param name="interfaceProgID">The interface name, preceeded by the library container name, e.g. "Excel._Worksheet"</param>
/// <returns>bool indicating whether the class does inherit the specified interface</returns>
bool DoesClassImplementInterface(IVBComponent component, string interfaceProgID);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="classTypeInfo">Low-level ITypeInfo wrapper representing the VBA project</param>
/// <param name="interfaceProgID">The interface name, preceeded by the library container name, e.g. "Excel._Worksheet"</param>
/// <returns>bool indicating whether the class does inherit the specified interface</returns>
bool DoesClassImplementInterface(TypeInfoWrapper classTypeInfo, string interfaceProgID);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">VBA Project name, as declared in the VBE</param>
/// <param name="className">Document class name, as declared in the VBA project</param>
/// <param name="interfaceProgIDs">An array of interface names, preceeded by the library container name, e.g. "Excel._Worksheet"</param>
/// <param name="matchedIndex">on return indicates the index into interfaceProgIDs that matched, or -1 if no match</param>
/// <returns>bool indicating whether the class does inherit one of the specified interfaces</returns>
bool DoesClassImplementInterface(IVBE ide, string projectName, string className, string[] interfaceProgIDs, out int matchedIndex);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="project">Safe-com wrapper representing the VBE project</param>
/// <param name="className">Document class name, as declared in the VBA project</param>
/// <param name="interfaceProgIDs">An array of interface names, preceeded by the library container name, e.g. "Excel._Worksheet"</param>
/// <param name="matchedIndex">on return indicates the index into interfaceProgIDs that matched, or -1 if no match</param>
/// <returns>bool indicating whether the class does inherit one of the specified interfaces</returns>
bool DoesClassImplementInterface(IVBProject project, string className, string[] interfaceProgIDs, out int matchedIndex);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <param name="className">Document class name, as declared in the VBA project</param>
/// <param name="interfaceProgIDs">An array of interface names, preceeded by the library container name, e.g. "Excel._Worksheet"</param>
/// <param name="matchedIndex">on return indicates the index into interfaceProgIDs that matched, or -1 if no match</param>
/// <returns>bool indicating whether the class does inherit one of the specified interfaces</returns>
bool DoesClassImplementInterface(TypeLibWrapper projectTypeLib, string className, string[] interfaceProgIDs, out int matchedIndex);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="component">Safe-com wrapper representing the VBA component</param>
/// <param name="interfaceProgIDs">An array of interface names, preceeded by the library container name, e.g. "Excel._Worksheet"</param>
/// <param name="matchedIndex">on return indicates the index into interfaceProgIDs that matched, or -1 if no match</param>
/// <returns>bool indicating whether the class does inherit one of the specified interfaces</returns>
bool DoesClassImplementInterface(IVBComponent component, string[] interfaceProgIDs, out int matchedIndex);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="classTypeInfo">Low-level ITypeInfo wrapper representing the VBA project</param>
/// <param name="interfaceProgIDs">An array of interface names, preceeded by the library container name, e.g. "Excel._Worksheet"</param>
/// <param name="matchedIndex">on return indicates the index into interfaceProgIDs that matched, or -1 if no match</param>
/// <returns>bool indicating whether the class does inherit one of the specified interfaces</returns>
bool DoesClassImplementInterface(TypeInfoWrapper classTypeInfo, string[] interfaceProgIDs, out int matchedIndex);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">VBA Project name, as declared in the VBE</param>
/// <param name="className">Document class name, as declared in the VBA project</param>
/// <param name="interfaceIID">The interface IID</param>
/// <returns>bool indicating whether the class does inherit the specified interface</returns>
bool DoesClassImplementInterface(IVBE ide, string projectName, string className, Guid interfaceIID);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <param name="className">Document class name, as declared in the VBA project</param>
/// <param name="interfaceIID">The interface IID</param>
/// <returns>bool indicating whether the class does inherit the specified interface</returns>
bool DoesClassImplementInterface(IVBProject project, string className, Guid interfaceIID);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <param name="className">Document class name, as declared in the VBA project</param>
/// <param name="interfaceIID">The interface IID</param>
/// <returns>bool indicating whether the class does inherit the specified interface</returns>
bool DoesClassImplementInterface(TypeLibWrapper projectTypeLib, string className, Guid interfaceIID);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="component">Safe-com wrapper representing the VBA component</param>
/// <param name="interfaceIID">The interface IID</param>
/// <returns>bool indicating whether the class does inherit the specified interface</returns>
bool DoesClassImplementInterface(IVBComponent component, Guid interfaceIID);
/// <summary>
/// Determines whether the specified VBA class implements a specific interface
/// </summary>
/// <param name="classTypeInfo">Low-level ITypeInfo wrapper representing the VBA project</param>
/// <param name="interfaceIID">The interface IID</param>
/// <returns>bool indicating whether the class does inherit the specified interface</returns>
bool DoesClassImplementInterface(TypeInfoWrapper classTypeInfo, Guid interfaceIID);
/// <summary>
/// Determines whether the specified VBA class implements one of several possible interfaces
/// </summary>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">VBA Project name, as declared in the VBE</param>
/// <param name="className">Document class name, as declared in the VBA project</param>
/// <param name="interfaceIIDs">An array of interface IIDs to check against</param>
/// <param name="matchedIndex">on return indicates the index into interfaceIIDs that matched, or -1 if no match</param>
/// <returns>bool indicating whether the class does inherit one of the specified interfaces</returns>
bool DoesClassImplementInterface(IVBE ide, string projectName, string className, Guid[] interfaceIIDs, out int matchedIndex);
/// <summary>
/// Determines whether the specified VBA class implements one of several possible interfaces
/// </summary>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <param name="className">Document class name, as declared in the VBA project</param>
/// <param name="interfaceIIDs">An array of interface IIDs to check against</param>
/// <param name="matchedIndex">on return indicates the index into interfaceIIDs that matched, or -1 if no match</param>
/// <returns>bool indicating whether the class does inherit one of the specified interfaces</returns>
bool DoesClassImplementInterface(IVBProject project, string className, Guid[] interfaceIIDs, out int matchedIndex);
/// <summary>
/// Determines whether the specified VBA class implements one of several possible interfaces
/// </summary>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <param name="className">Document class name, as declared in the VBA project</param>
/// <param name="interfaceIIDs">An array of interface IIDs to check against</param>
/// <param name="matchedIndex">on return indicates the index into interfaceIIDs that matched, or -1 if no match</param>
/// <returns>bool indicating whether the class does inherit one of the specified interfaces</returns>
bool DoesClassImplementInterface(TypeLibWrapper projectTypeLib, string className, Guid[] interfaceIIDs, out int matchedIndex);
/// <summary>
/// Determines whether the specified VBA class implements one of several possible interfaces
/// </summary>
/// <param name="component">Safe-com wrapper representing the VBA component</param>
/// <param name="interfaceIIDs">An array of interface IIDs to check against</param>
/// <param name="matchedIndex">on return indicates the index into interfaceIIDs that matched, or -1 if no match</param>
/// <returns>bool indicating whether the class does inherit one of the specified interfaces</returns>
bool DoesClassImplementInterface(IVBComponent component, Guid[] interfaceIIDs, out int matchedIndex);
/// <summary>
/// Determines whether the specified VBA class implements one of several possible interfaces
/// </summary>
/// <param name="classTypeInfo">Low-level ITypeInfo wrapper representing the VBA project</param>
/// <param name="interfaceIIDs">An array of interface IIDs to check against</param>
/// <param name="matchedIndex">on return indicates the index into interfaceIIDs that matched, or -1 if no match</param>
/// <returns>bool indicating whether the class does inherit one of the specified interfaces</returns>
bool DoesClassImplementInterface(TypeInfoWrapper classTypeInfo, Guid[] interfaceIIDs, out int matchedIndex);
/// <summary>
/// Returns the class progID of a control on a UserForm
/// </summary>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">VBA Project name, as declared in the VBE</param>
/// <param name="userFormName">UserForm class name, as declared in the VBA project</param>
/// <param name="controlName">Control name, as declared on the UserForm</param>
/// <returns>string class progID of the specified control on a UserForm, e.g. "MSForms.CommandButton"</returns>
string GetUserFormControlType(IVBE ide, string projectName, string userFormName, string controlName);
/// <summary>
/// Returns the class progID of a control on a UserForm
/// </summary>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <param name="userFormName">UserForm class name, as declared in the VBA project</param>
/// <param name="controlName">Control name, as declared on the UserForm</param>
/// <returns>string class progID of the specified control on a UserForm, e.g. "MSForms.CommandButton"</returns>
string GetUserFormControlType(IVBProject project, string userFormName, string controlName);
/// <summary>
/// Returns the class progID of a control on a UserForm
/// </summary>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <param name="userFormName">UserForm class name, as declared in the VBA project</param>
/// <param name="controlName">Control name, as declared on the UserForm</param>
/// <returns>string class progID of the specified control on a UserForm, e.g. "MSForms.CommandButton"</returns>
string GetUserFormControlType(TypeLibWrapper projectTypeLib, string userFormName, string controlName);
/// <summary>
/// Returns the class progID of a control on a UserForm
/// </summary>
/// <param name="ide">Safe-com wrapper representing the UserForm VBA component</param>
/// <param name="controlName">Control name, as declared on the UserForm</param>
/// <returns>string class progID of the specified control on a UserForm, e.g. "MSForms.CommandButton"</returns>
string GetUserFormControlType(IVBComponent component, string controlName);
/// <summary>
/// Returns the class progID of a control on a UserForm
/// </summary>
/// <param name="userFormTypeInfo">Low-level ITypeLib wrapper representing the UserForm VBA component</param>
/// <param name="controlName">Control name, as declared on the UserForm</param>
/// <returns>string class progID of the specified control on a UserForm, e.g. "MSForms.CommandButton"</returns>
string GetUserFormControlType(TypeInfoWrapper userFormTypeInfo, string controlName);
/// <summary>
/// Returns the class progID of a control on a UserForm
/// </summary>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">VBA Project name, as declared in the VBE</param>
/// <param name="documentClassName">Document class name, as declared in the VBA project</param>
/// <param name="controlName">Control name, as declared on the UserForm</param>
/// <returns>string class progID of the specified control on a UserForm, e.g. "MSForms.CommandButton"</returns>
string GetDocumentClassControlType(IVBE ide, string projectName, string documentClassName, string controlName);
/// <summary>
/// Returns the class progID of a control on a UserForm
/// </summary>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <param name="documentClassName">Document class name, as declared in the VBA project</param>
/// <param name="controlName">Control name, as declared on the UserForm</param>
/// <returns>string class progID of the specified control on a UserForm, e.g. "MSForms.CommandButton"</returns>
string GetDocumentClassControlType(IVBProject project, string documentClassName, string controlName);
/// <summary>
/// Returns the class progID of a control on a UserForm
/// </summary>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <param name="documentClassName">Document class name, as declared in the VBA project</param>
/// <param name="controlName">Control name, as declared on the UserForm</param>
/// <returns>string class progID of the specified control on a UserForm, e.g. "MSForms.CommandButton"</returns>
string GetDocumentClassControlType(TypeLibWrapper projectTypeLib, string documentClassName, string controlName);
/// <summary>
/// Returns the class progID of a control on a UserForm
/// </summary>
/// <param name="ide">Safe-com wrapper representing the UserForm VBA component</param>
/// <param name="controlName">Control name, as declared on the UserForm</param>
/// <returns>string class progID of the specified control on a UserForm, e.g. "MSForms.CommandButton"</returns>
string GetDocumentClassControlType(IVBComponent component, string controlName);
/// <summary>
/// Returns the class progID of a control on a UserForm
/// </summary>
/// <param name="documentClass">Low-level ITypeLib wrapper representing the UserForm VBA component</param>
/// <param name="controlName">Control name, as declared on the UserForm</param>
/// <returns>string class progID of the specified control on a UserForm, e.g. "MSForms.CommandButton"</returns>
string GetDocumentClassControlType(TypeInfoWrapper documentClass, string controlName);
/// <summary>
/// Retreives the TYPEFLAGS of a VBA component (e.g. module/class), providing flags like TYPEFLAG_FCANCREATE, TYPEFLAG_FPREDECLID
/// </summary>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">The VBA project name</param>
/// <param name="componentName">The name of the component (module/class etc) to get flags for</param>
/// <returns>ComTypes.TYPEFLAGS flags from the ITypeInfo</returns>
System.Runtime.InteropServices.ComTypes.TYPEFLAGS GetComponentTypeFlags(IVBE ide, string projectName, string componentName);
/// <summary>
/// Retreives the TYPEFLAGS of a VBA component (e.g. module/class), providing flags like TYPEFLAG_FCANCREATE, TYPEFLAG_FPREDECLID
/// </summary>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <param name="componentName">The name of the component (module/class etc) to get flags for</param>
/// <returns>ComTypes.TYPEFLAGS flags from the ITypeInfo</returns>
System.Runtime.InteropServices.ComTypes.TYPEFLAGS GetComponentTypeFlags(IVBProject project, string componentName);
/// <summary>
/// Retreives the TYPEFLAGS of a VBA component (e.g. module/class), providing flags like TYPEFLAG_FCANCREATE, TYPEFLAG_FPREDECLID
/// </summary>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <param name="componentName">The name of the component (module/class etc) to get flags for</param>
/// <returns>ComTypes.TYPEFLAGS flags from the ITypeInfo</returns>
System.Runtime.InteropServices.ComTypes.TYPEFLAGS GetComponentTypeFlags(TypeLibWrapper projectTypeLib, string componentName);
/// <summary>
/// Retreives the TYPEFLAGS of a VBA component (e.g. module/class), providing flags like TYPEFLAG_FCANCREATE, TYPEFLAG_FPREDECLID
/// </summary>
/// <param name="component">Safe-com wrapper representing the VBA component to get flags for</param>
/// <returns>ComTypes.TYPEFLAGS flags from the ITypeInfo</returns>
System.Runtime.InteropServices.ComTypes.TYPEFLAGS GetComponentTypeFlags(IVBComponent component);
/// <summary>
/// Retreives the TYPEFLAGS of a VBA component (e.g. module/class), providing flags like TYPEFLAG_FCANCREATE, TYPEFLAG_FPREDECLID
/// </summary>
/// <param name="componentTypeInfo">Low-level ITypeInfo wrapper representing the VBA component to get flags for</param>
/// <returns>ComTypes.TYPEFLAGS flags from the ITypeInfo</returns>
System.Runtime.InteropServices.ComTypes.TYPEFLAGS GetComponentTypeFlags(TypeInfoWrapper componentTypeInfo);
/// <summary>
/// Returns a TypeInfoReference object containing information about the specified VBA project reference
/// </summary>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <param name="projectName">VBA Project name, as declared in the VBE</param>
/// <param name="referenceIdx">Index into the references collection</param>
/// <returns>TypeInfoReference containing information about the specified VBA project reference</returns>
TypeInfoReference GetReferenceInfo(IVBE ide, string projectName, int referenceIdx);
/// <summary>
/// Returns a TypeInfoReference object containing information about the specified VBA project reference
/// </summary>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <param name="referenceIdx">Index into the references collection</param>
/// <returns>TypeInfoReference containing information about the specified VBA project reference</returns>
TypeInfoReference GetReferenceInfo(IVBProject project, int referenceIdx);
/// <summary>
/// Returns a TypeInfoReference object containing information about the specified VBA project reference
/// </summary>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <param name="referenceIdx">Index into the references collection</param>
/// <returns>TypeInfoReference containing information about the specified VBA project reference</returns>
TypeInfoReference GetReferenceInfo(TypeLibWrapper projectTypeLib, int referenceIdx);
/// <summary>
/// Returns a TypeInfoReference object containing information about the specified VBA project reference
/// </summary>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <param name="vbeReference">Safe-com wrapper representing the VBA project reference</param>
/// <returns>TypeInfoReference containing information about the specified VBA project reference</returns>
TypeInfoReference GetReferenceInfo(IVBProject project, IReference vbeReference);
/// <summary>
/// Documents the type libaries of all loaded VBA projects
/// </summary>
/// <param name="ide">Safe-com wrapper representing the VBE</param>
/// <returns>text document, in a non-standard format, useful for debugging purposes</returns>
string DocumentAll(IVBE ide);
/// <summary>
/// Documents the type libary of a single VBA project
/// </summary>
/// <param name="project">Safe-com wrapper representing the VBA project</param>
/// <returns>text document, in a non-standard format, useful for debugging purposes</returns>
string DocumentAll(IVBProject project);
/// <summary>
/// Documents the type libary of a single VBA project
/// </summary>
/// <param name="projectTypeLib">Low-level ITypeLib wrapper representing the VBA project</param>
/// <returns>text document, in a non-standard format, useful for debugging purposes</returns>
string DocumentAll(TypeLibWrapper projectTypeLib);
}
}