Compiling VB6 applications when an error occurs

I have a VB6 project that is currently compiling, although I have access to an object that does not exist.

The code looks something like this:

Public vizSvrEmp As VizualServer.Employees Set vizSvrEmp = New VizualServer.Employees Fn = FreeFile Open vizInfo.Root & "FILE.DAT" For Random As #Fn Len = RecLen Do While Not EOF(Fn) Get #Fn, , ClkRecord With vizSvrEmp Index = .Add(ClkRecord.No) .NotAvailable(Index) = ClkRecord.NotAvailable .Bananas(Index) = ClkRecord.Start 'Plus lots more properties End With Loop 

The Bananas property does not exist in the object, but it is still compiling. My vizSvrEmp Object is a .NET.NET COM Interop DLL and an early link, and if I dial a point, I get Intellisense correctly (which does not show bananas)

I tried to remove With but it behaves the same

How can I make sure that these errors are taken by the compiler?

+4
source share
1 answer

I know you figured out Hans, but just for completeness, an alternative to using ClassInterface(ClassInterfaceType.AutoDual) is to use ClassInterface(ClassInterfaceType.None) and then implement an explicit interface decorated with InterfaceType(ComInterfaceType.InterfaceIsDual)> .

This works more, but gives you full control over the GUID of the interface. AutoDual automatically generates unique GUIDs for interfaces when compiling, which saves time, but you do not control them.

When used, it looks something like this:

 <ComVisible(True), _ Guid(Guids.IEmployeeGuid), _ InterfaceType(ComInterfaceType.InterfaceIsDual)> _ Public Interface IEmployee <DispIdAttribute(1)> _ ReadOnly Property FirstName() As String <DispIdAttribute(2)> _ ReadOnly Property LastName() As String <DispIdAttribute(3)> _ Function EtcEtc(ByVal arg As String) As Boolean End Interface <ComVisible(True), _ Guid(Guids.EmployeeGuid), _ ClassInterface(ClassInterfaceType.None)> _ Public NotInheritable Class Employee Implements IEmployee Public ReadOnly Property FirstName() As String Implements IEmployee.FirstName Get Return "Santa" End Get End Function 'etc, etc End Class 

Notice how the GUIDs are declared. I find creating a helper class for GUID consolidation and Intellisense performance:

 Friend Class Guids Public Const AssemblyGuid As String = "BEFFC920-75D2-4e59-BE49-531EEAE35534" Public Const IEmployeeGuid As String = "EF0FF26B-29EB-4d0a-A7E1-687370C58F3C" Public Const EmployeeGuid As String = "DE01FFF0-F9CB-42a9-8EC3-4967B451DE40" End Class 

Finally, I use them at the assembly level:

 'The following GUID is for the ID of the typelib if this project is exposed to COM <Assembly: Guid(Guids.AssemblyGuid)> 'NOTE: The following attribute explicitly hides the classes, methods, etc in ' this assembly from being exported to a TypeLib. We can then explicitly ' expose just the ones we need to on a case-by-case basis. <Assembly: ComVisible(False)> <Assembly: ClassInterface(ClassInterfaceType.None)> 
+2
source

All Articles