Sample: DispInvoker.exe Calls Automation Methods Passing Names at Run-Time

ID: Q202057


The information in this article applies to:


SUMMARY

DispInvoker.exe is a self-extracting executable file that provides functionality similar to the Visual Basic 6.0 CallByName function. Most of the time you can discover the properties and methods of an object at design-time and write code to handle them. In a few cases, however, you may not know about an object’s properties and methods in advance, or you may simply want the flexibility of allowing an end user to specify properties or execute methods at run-time. Visual Basic 6.0 introduced the CallByName function to provide this functionality, but it is not available in earlier versions of Visual Basic. The Dispinvoker sample provides similar functionality, allowing you to create a wrapper object with:


Call() Method


MORE INFORMATION

The following file is available for download from the Microsoft Software Library:

DispInvoker.exe
Release Date: Apr-14-1999

For more information about downloading files from the Microsoft Software Library, please see the following article in the Microsoft Knowledge Base:
Q119591 How to Obtain Microsoft Support Files from Online Services


File Name File Size
class1 1KB
DispTools.aps 4KB
DispTools.clw 1KB
DispTools.cpp 4KB
DispTools.def 1KB
DispTools.dll 74KB
DispTools.dsp 17KB
DispTools.dsw 1KB
DispTools.h 7KB
DispTools.idl 1KB
DispTools.ncb 153KB
DispTools.opt 55KB
DispTools.plg 4KB
DispTools.rc 4KB
DispTools.tlb 2KB
DispTools_i.c 2KB
DispTools_p.c 7KB
DispToolsps.def 1KB
DispToolsps.mk 1KB
dlldata.c 1KB
dlldatax.c 1KB
form1 3KB
lUnklmpl.cpp 1KB
lUnklmpl.h 1KB
lUnklmpl.rgs 1KB
module1 1KB
Mssccprj 1KB
Project1 22KB
Project1 1KB
resource.h 1KB
StdAfx.cpp 1KB
StdAfx.h 1KB
Wrap.cpp 2KB
Wrap.h 5KB
Wrap.rgs 1KB
Automation allows calling objects in three ways: Development tools, such as Visual Basic, allow limited use of late binding. Method names must always be explicitly specified at design-time and cannot be specified at run-time.

Dispinvoker is a C++ Dispatch object that allows full exploitation of late binding.

An Automation Object, obj, and the wrapper object, objWrap, may be obtained as follows:

Set objWrap = Wrap.GetInvoker(obj) 
objWrap has the same methods as obj plus the additional method Call(), which allows full use of late binding.

The Call() method in the Dispinvoker wrapper uses the GetIDsOfNames() method to determine the DispID of the method to be called. The call is then issued with the parameters passed from the client.

Here are a few things to keep in mind:

Sample Code

Given a Visual Basic client and an automation object named obj, of type Class1, with method mySub(), add the following code:


 ' Create an object of type class1
    Dim obj As New Class1
    Dim wrp as New DISPTOOLSLib.Wrap
    Dim objWrp As Object

 ' Retrieve the DispInvoker wrapper
    Set objWrp = wrp.GetInvoker(obj)

    obj.mySub ' Calls method mySub directly on the object obj.
    objWrp.mySub ' Calls method mySub on the DispInvoker wrapper ObjWrp.
    objWrp.Call("mySub") ' Calls method mySub using Call() method on the 
                         ' DispInvoker wrapper.
'-------------------------------- 
Running the preceding code does the following:

Additional query words:


Keywords          : kbfile kbActiveX kbCOMt kbVBp400 kbVBp500 kbGrpVB 
Version           : WINDOWS:4.0,5.0
Platform          : WINDOWS 
Issue type        : kbinfo 

Last Reviewed: April 14, 1999