createComObject()
Creates a COM object (also without user interface (not ActiveX)).
Synopsis
idispatch createComObject(string objName [, bool
bWithEvents, string postfix]);
Parameters
Parameter | Description |
---|---|
objName | Name of the COM Object, for example, "Excel.Application"; or "ADODB.Connection"; |
bwithEvents | if TRUE was set, COM object responds to events (like mouse click etc). |
postfix | Defines the COM object, which should respond to an event in case of several COM objects. |
Return value
In case of errors 0.
Errors
Undefined functions, missing or wrong parameters.
Description
Creates an arbitrary COM object. This function can be used many-sided. It can be used to control and fill databases as well as to control Excel and Word applications etc. The properties that can be controlled via the function can be detected via an external browser ( for example, Visual Basic). Since COM objects are Windows specific, the function is only available under Windows.
The UI always connects to all event interfaces of a COM object, so if a COM object contains multiple interfaces with the same event, it can not be distinguished which event has taken place.
In order to avoid performance problems the "." operator on idispatch should be used as rare as possible and COM objects should not be fetched more than once (saved in idispatch).
Catching Events via COM
In the Control Manager the COM Object can call a callback function, when the bwithEvents parameter is set to TRUE. The callback functions are called as defined by the COM Object, e.g.:
void onEventInitialize_myPostfix(...){ }
whereas "_myPostfix" is the optional third parameter of the createComObject() function.
With -dbg 2 all possible Events are shown (in Qt known as "signals") which are incoming after the call of createComObject(). Qt data types are returned, i.e. the CTRL functions must be defined with modified syntax.
Events do not support "by reference" arguments.
main()
{
idispatch objXL;
idispatch objXLWorkbooks;
idispatch objXLWorkbook;
anytype workbook;
objXL = createComObject("Excel.Application", true, "TEST");
objXLWorkbooks = objXL.Workbooks;
objXLWorkbook = objXLWorkbooks.Add(workbook);
}
void NewWorkbook_TEST()
{
DebugN("NEW Workbook");
}
Create a button using the graphics editor and use the code below for the button. The code opens an Excel sheet and afterwards a diagram, that rotates:
main()
{
idispatch objXL;
idispatch objXLchart;
idispatch objXLWorkbooks;
idispatch objXLWorkbook;
int i;
dyn_int array;
anytype workbook;
array = makeDynInt(1,2,3);
objXL = createComObject("Excel.Application");
objXL.Visible = -1;
objXLWorkbooks = objXL.Workbooks;
objXLWorkbook = objXLWorkbooks.Add(workbook);
releaseComObject(objXLWorkbook);
releaseComObject(objXLWorkbooks);
objXL.Range("A1:C1", workbook).Value2 = array;
objXL.Range("A1:C1", workbook).Select();
objXLchart = objXL.Charts.Add(workbook, workbook, workbook, workbook);
objXLchart.Visible = -1;
objXLchart.Type = -4100;
//xl3DColumn
//xl3DColumn is an Excel-defined constant with value = -4100.
for (i = 30; i<=180; i = i + 10)
{
delay(0,800);
objXLchart.Rotation = i;
}
objXL.Visible = 0;
releaseComObject(objXLchart);
releaseComObject(objXL);
delay(20);
}
This example opens a connection to an Ado database, and executes a query. Since two COM objects are created, you have to define the postfix "rs".
main()
{
cnn = createComObject( "ADODB.Connection");
cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51; Data
Source=D://TEMP//books.mdb;"
cnn.Open("", "", "", -1); // open a new connection
rs = createComObject( "ADODB.Recordset", true, "rs" );
rs.CursorLocation = 3;
//position of the cursor
rs.Open ("SELECT * FROM Booksales ", cnn, 2 /*adOpenDynamic*/, -1, -1 );
}
Assignment
Miscellaneous functions
Availability
UI