[AccessD] more on early versus late binding

Glen McWilliams glen_mcwilliams at msn.com
Tue Jul 13 20:14:32 CDT 2004


John

Excelent description of referencing and binding, both early and late.
No mud at all. Very, very clear.

Glen McWilliams
glen at creativehightek.com


>From: "jwcolby" <jwcolby at colbyconsulting.com>
>Reply-To: Access Developers discussion and problem 
>solving<accessd at databaseadvisors.com>
>To: "'Access Developers discussion and problem 
>solving'"<accessd at databaseadvisors.com>
>Subject: RE: [AccessD] more on early versus late binding
>Date: Mon, 12 Jul 2004 21:28:34 -0400
>
>Nope, early is not that, and late is not that.
>
>Early is dimensioning a variable as a specific object type - for example as
>an excel object or a word object or a command control etc. then referencing
>the object properties directly.
>
>Dim cbo as combo
>  debug.print cbo.Name
>
>Late is dimensioning a variable as an OBJECT data type, then referencing 
>the
>property but using the "object object".
>
>Dim cbo as object
>  debug.print cbo.name
>
>The reason it is called early and late is simply that early binding:
>
>Dim cbo as combo
>
>Causes the compiler (interpreter actually) to find and set a reference to
>the actual object (class, ocx etc) that the cbo truly is AT COMPILE TIME.
>
>Late binding causes the interpreter to "discover" what the object is by 
>what
>is stored in the variable AT RUN TIME and look up the properties and stuff
>in the actual object (library, ocx etc) at run time.
>
>Thus the early binding causes the map of dim to real thing without ever 
>even
>running the code.  Late binding simply cannot discover what to do with the
>dimensioned variable until the variable is set = to something.
>
>This is very often used to pass in different things to a function for
>example.
>
>Function MyObject(obj as object)
>   debug.print object.name
>End function
>
>Function TestObjects()
>	MyObject MyCbo
>	MyObject MyForm
>End function
>
>MyObject can be passed ANYTHING at all (objects), a spreadsheet, a word
>document, a combo box.  What happens inside of MyObject may or may not be
>legal depending on what you pass in to the function, but you can pass in 
>ANY
>OBJECT AT ALL because the compiler does not check the dimensioned type
>against the passed in type (other than to determine that it is an object).
>
>Function MyControl(txt As TextBox)
>     Debug.Print txt.Name
>End Function
>
>Function TestControls()
>Dim MyCbo As ComboBox
>Dim MyTextBox As TextBox
>Dim MyForm As Form
>     Set MyForm = New Form_Form1
>     MyControl MyForm '<<<<< ERROR AT RUN TIME
>     MyControl MyCbo
>     MyControl MyTextBox
>End Function
>
>Test control will correctly pass in controls but won't run since MyForm is
>dimensioned as a form and at RUN TIME the interpreter checks all calls to
>MyControl to see if what is being passed in is a variable of type control.
>
>With early binding, since you dimension an object specifically to its 
>object
>type, you can use intellisense because the compiler knows how to find the
>object information.  With late binding, the object type isn't determined
>until something is actually passed in so how can intellisense help you out.
>
>Hope this helps explain what early and late binding are really all about.
>
>Now... Setting the reference really has nothing to do with any of this 
>OTHER
>THAN allowing some specific object type to be found in a library, and thus
>be dimensioned to a specific object type.  IOW, If I don't reference the
>excel library, I can STILL USE EXCEL, but I have to late bind, dim as an
>object, then store an Excel object (spreadsheet, cell etc) in the variable.
>If I reference the excel library, now I can early bind and dimension a
>variable as a spreadsheet, or a cell, or whatever I want since those things
>can be found in a referenced library.
>
>So setting the reference is neither early binding nor late binding.  It
>ENABLES early binding.  If I reference the Excel lib, BUT NEVER USE ANY
>EXCEL CODE... I haven't early or late bound to Excel - I haven't used Excel
>in any way whatsoever.  However I cannot reference an excel object type 
>(dim
>a variable as a cell or spreadsheet etc) unless I reference the Excel
>library.
>
>Referencing a library does nothing more than load (before compiling) a 
>table
>of objects inside that library into a table of all possible objects for the
>compiler to use to look up dimension statement datatypes in.  If a 
>dimension
>statement datatype is not found in the table of all possible datatypes, 
>then
>a compile error is thrown on the dim statement.
>
>Clear as mud?
>
>John W. Colby
>www.ColbyConsulting.com
>





More information about the AccessD mailing list