This topic describes the COM interface to FlashBASIC. The objective is to allow a FlashBASIC module to act as an Automation Controller. This module can be a main, a trigger, or a rule module.
Methods, property get, and property set are called only by names. These are supported in dispInterface.
For more information on these interfaces, see FlashBASIC Automation Application Interfaces.
A FlashBASIC Module Example:
include dm,bp,includes nt_util.inc cFunction fsicli.builtin include dm,bp,includes flashauto.inc * Initialize the COM library. code = %CoInitialize( &hAutoCTRL ) if code = 0 then goto error * Create a COM object and get the IUnknown interface pointer. code = %CoCreateObject( hAutoCTRL, “Excel.Application.8”, &pUnk ) if code = 0 then goto error * Call to Query for the IDispatch interface. code = %CoQueryInterface( pUnk, IID_IDispatch, &hObjExApplication ) if code = 0 then goto error * Call a property Put to make the Excel object visible. Note: b is the format string for the Boolean data type. code = %CoPropertyPut( hObjExApplication, “Visible”, “b”, TRUE ) if code = 0 then goto error * Call a property get dispatch to get the WorkBook collection. Note: 0 is a NULL format string, which means no argument to the invoked method. code = %CoGetDispatch( hObjExApplication, “WorkBooks”, &hObjWorkBooks, 0 ) if code = 0 then goto error * Call a property get dispatch to add a WorkBook into this WorkBooks collection. Note : Add is the method name. 0 is a NULL format string, which means no arguments to the invoked method. code = %CoGetDispatch( hObjWorkBooks, “Add”, &hObjWorkBook, 0 ) if code = 0 then goto error * Call a property get dispatch to get the Worksheet. code = %CoGetDispatch( hObjExApplication, "ActiveSheet", &hObjActiveSheet, 0 ) if code = 0 then goto error * Call a property get dispatch to get a Range object in the worksheet. Note: s is the format string for the string data type. A1 is cell A1. code = %CoGetDispatch( hObjActiveSheet, “Range”, &hObjRange, “s”, "A1" ) if code = 0 then goto error * Call a property Put to put a string into A1. Note: Value is the property name. s is the format string for the string data type. Company A is the value to put in cell A1. code = %CoPropertyPut( hObjRange, “Value”, “s”, "Company A") if code = 0 then goto error * Call a method to save this Excel Workbook as d:\autoctrl.xls. Note: 0 means not returning a dispatch object. code = %CoInvoke( hObjWorkBook, "SaveAs", DISPATCH_METHOD, 0, "s", "d:\autoctrl.xls") if code = 0 then goto error * Call a method to quit Excel. Note: The first 0 means not returning a dispatch object. The second 0 specifies that there is no argument to the invoked method. code = %CoInvoke( hObjExApplication, "Quit", DISPATCH_METHOD, 0, 0 ) if code = 0 then goto error goto done error: MsgLen = %CoGetException( hAutoCTRL, ExceptStr ) %CoUninitialize( hAutoCTRL ) … done: %CoUnInitialize( hAutoCTRL ) |
The object is an opaque handle to the IDispatch interface of the object.
NOTE |
As an enhancement, a precompiler could read the type library associated to an object and understand the various methods, properties, and arguments to generate the appropriate % function calls. |
The automation object handle is returned to FlashBASIC as an integer. This handle is a pointer to an internal FlashBASIC Automation object that contains the IDispatch interface pointer, exception information, and name cache.
For performance reasons, the FlashBASIC Automation object contains a cache of the methods to associate the name and type to a DISPID.
All FlashBASIC arguments are coerced into VARIANTS.
Flash Automation Reserved Arguments
TRUE and FALSE are reserved for the CoPropertyPut, CoPropertyGet, CoGetDispatch, and CoInvoke. For example:
* Call a property Put to make the Excel object visible. code = %CoPropertyPut( hObjExApplication, “Visible”, “b”, TRUE ) if code = 0 then goto error |
The FlashBASIC Automation object contains an EXCEPINFO structure that can be queried from FlashBASIC by %CoGetException, which returns a string containing the error description.