Directory Services

Resolution of Function/Property Name Conflicts in Automation in Extensions

In this section, an object means the object, as a whole, as an ADSI client views it. That is, ADSI and all its extensions.

If two or more dual IDispatch interfaces in an object support a property or method of the same name, for example, Func1, invocation is determined using the following criteria:

  1. If the client has a pointer to one of the dual interfaces that support a method called Func1 and,
  2. If the Automation environment supports vtable access.

In the Late Binding versus Vtable Access in the ADSI Extension Model section, there is a brief explanation about how a client can add a pointer to a dual interface, and a description of the types of environments that support vtable access. For more information, see the programming guide for COM/OLE, Visual Basic, Visual Basic for Applications, VBScript, and JavaScript.

If both conditions are true, that is, a client has a pointer to a dual (only) interface, IDuallInf1, which supports a function called Func1, and the Automation environment supports vtable access, IDualInf1::Func1 is invoked directly through ADSI vtable access.

If either condition 1 or 2, as stated above, fails, IDispatch::GetIDsOfNames and IDispatch::Invoke are called to invoke Func1. Because all extension objects redirect the IDispatch functions back to the aggregator, the aggregator controls which Func1 is invoked. The rules are as follows: