From WikiChip
Difference between revisions of "mirc/identifiers/$comcall"
< mirc‎ | identifiers

(Created page with "{{mirc title|$comcall Identifier}}'''$comcall''' calls a member of an open COM connection with the specified method and parameter, it is multithreaded and won't halt the scrip...")
 
(Parameters)
 
(2 intermediate revisions by the same user not shown)
Line 5: Line 5:
  
 
== Synopsis ==
 
== Synopsis ==
<pre>$comcall(name,alias,member,method,type1,value1,...,typeN,valueN) - calls a member of an open COM connection with the specified method and parameters, returns 1 if the call succeeds, 0 = fail.
+
<pre>$comcall(name,alias,member,method,type1,value1,...,typeN,valueN)
 
</pre>
 
</pre>
  
== Paramters ==
+
== Parameters ==
 
* '''name''' - The name of the connection or the Nth connection
 
* '''name''' - The name of the connection or the Nth connection
 
* '''alias''' - The name of an alias that will be called once the call returns
 
* '''alias''' - The name of an alias that will be called once the call returns
Line 43: Line 43:
 
! Type !! Description !! Values  
 
! Type !! Description !! Values  
 
|-
 
|-
|i1 || single byte signed integer || 0 to 225
+
|i1 || single byte signed integer || -128 to 127
 
|-
 
|-
 
|ui1 || single byte unsigned integer || 0 to 255
 
|ui1 || single byte unsigned integer || 0 to 255
Line 92: Line 92:
  
 
== Example ==
 
== Example ==
<source lang="mIRC"></source>
+
<source lang="mIRC">
 +
alias runVbs {
 +
  var %s = $mircdir $+ foo.vbs
 +
  write -c foo.vbs  Dim c $lf c = 0 $lf Do While c < 10000000 $lf c = c + 1 $lf Loop
 +
  .comopen x WScript.Shell
 +
 
 +
  ;mode 1 = comcall
 +
  if ($1 == 1) noop $comcall(x, cbthread, Run, 1, bstr*, %s, int, 1, bool, 1)
 +
  else {
 +
    noop $com(x,  Run, 1, bstr*, %s, int, 1, bool, 1)
 +
    .comclose x
 +
  }
 +
}
 +
alias cbthread echo -a done | .comclose x
 +
</source>Compare //var %t $ticks | runvbs 1 | echo -a $calc($ticks - %t) vs //var %t $ticks | runvbs 2 | echo -a $calc($ticks - %t)
  
 
== Compatibility ==
 
== Compatibility ==

Latest revision as of 08:28, 17 August 2018

$comcall calls a member of an open COM connection with the specified method and parameter, it is multithreaded and won't halt the script, an alias is called once the call returns.

If $comcall() fails when calling an object and $com() does not, this means that the object is not compatible with the threading model of mIRC, so $com() must be used. You can check the $comerr value in the alias to determine if a $comcall() failed or not.


Synopsis[edit]

$comcall(name,alias,member,method,type1,value1,...,typeN,valueN)

Parameters[edit]

  • name - The name of the connection or the Nth connection
  • alias - The name of an alias that will be called once the call returns
  • member - The name of the function of the object
  • method - A combination of the following value added together:
Value Method
1 DISPATCH_METHOD - Call a member of an object
2 DISPATCH_PROPERTYGET - Return a value
3 (1+2) Call a member and return a value *
4 DISPATCH_PROPERTYPUT - Set a property
5 (1+4) Set a property with a member call *
6 (2+4) Set a property and return a value *
7 (1+2+4) Set a property and return a value with a member call *
8 DISPATCH_PROPERTYPUTREF - Set a property by reference
9 (1+8) Set a property by reference with a member call *
10 (2+8) Set a property by reference and return a value *
  • type1 - The variable type, can be:
Type Description Values
i1 single byte signed integer -128 to 127
ui1 single byte unsigned integer 0 to 255
i2 two byte signed integer -32768 to 32767
ui2 two byte unsigned integer 0 to 65535
i4 four byte signed integer +/- 2147483647
ui4 Holds unsigned 32-bit (4-byte) integers 0 through 4,294,967,295
int integer -2147483648 to 2147483647
uint unsigned integer 0 to 4294967295
r4 real, 4-byte floating point number 1.17549435E-38 to 3.40282347E+38
r8 double real, 8-byte floating point number 2.2250738585072014E-308 - 1.7976931348623157E+308
cy eight byte curreny number -922337203685477.5625 to 922337203685477.5625
date contains date and time, stored as an 8-byte floating-point number +/-79,228,162,514,264,337,593,543,950,335
decimal Holds signed 128-bit (16-byte) values representing 96-bit (12-byte) integer numbers. +/-79,228,162,514,264,337,593,543,950,335
bool contain any string or numeric representation.
bstr null-terminated unicode character string value. A string can contain from 0 to approximately 2 billion (2^31) Unicode characters.
variant can contain string, date, time, boolean, or numeric values. When used, a data type must follow it: for example: variant int 5
dispatch This data type indicates a pointer to an IDispatch interface on an OLE object (DBTYPE_IDISPATCH).
unknown This data type indicates a pointer to an IUnknown interface on an OLE object (DBTYPE_IUNKNOWN).
error This data type indicates a 32-bit error code (DBTYPE_ERROR)

You can pass a binary variable by prefixing the type of the variable with an '&' sign eg. $com(name,member,method,&bstr &binvar)

To make a variable by reference, postfix the data type with an asterisk and a variable name, for example: int* pIntOfBeer.

  • value1 - the value assigned to the variable type

Properties[edit]

None

Example[edit]

alias runVbs {
  var %s = $mircdir $+ foo.vbs
  write -c foo.vbs  Dim c $lf c = 0 $lf Do While c < 10000000 $lf c = c + 1 $lf Loop
  .comopen x WScript.Shell
 
  ;mode 1 = comcall
  if ($1 == 1) noop $comcall(x, cbthread, Run, 1, bstr*, %s, int, 1, bool, 1)
  else {
    noop $com(x,  Run, 1, bstr*, %s, int, 1, bool, 1)
    .comclose x
  }
}
alias cbthread echo -a done | .comclose x
Compare //var %t $ticks | runvbs 1 | echo -a $calc($ticks - %t) vs //var %t $ticks | runvbs 2 | echo -a $calc($ticks - %t)

Compatibility[edit]

Added: mIRC v5.9
Added on: 26 Apr 2001
Note: Unless otherwise stated, this was the date of original functionality.
Further enhancements may have been made in later versions.


See Also[edit]