ID: 48061
Updated by: [email protected]
Reported By: kmb at kai-m-becker dot de
-Status: Assigned
+Status: Open
Bug Type: COM related
Operating System: Windows XP SP3
PHP Version: 5.2.9
Assigned To: wez
Previous Comments:
------------------------------------------------------------------------
[2009-04-23 13:43:07] kmb at kai-m-becker dot de
Description:
------------
When calling a COM method with an array argument by reference, a
com_exception "type mismatch" is thrown.
Problem occurs only with arrays(!) as arg by ref.
Scalar types work fine as arg by ref.
php-5.2.9\ext\com_dotnet\com_com.c shows that the exception comes from
IDispatch_Invoke() (Windows-API) called in php_com_invoke_helper().
Reproduce code:
---------------
$opc = new COM('Matrikon.OPC.Automation'); // <-- certified COM App
$opc->Connect('Matrikon.OPC.Simulation.1');
$opcgroup = $opc->OPCGroups->Add("mes");
// some code to fill $serverhandles
$values = array();
$errors = array();
$qualities = array();
$timestamps = array();
// function SyncRead( // acc. to com_print_typeinfo() and OPC-spec.
// /* VT_I2 [2] [in] */ $Source,
// /* VT_I4 [3] [in] */ $NumItems,
// /* VT_PTR [26] [in] --> VT_SAFEARRAY [27] */ &$ServerHandles,
// /* VT_PTR [26] [out] --> VT_SAFEARRAY [27] */ &$Values,
// /* VT_PTR [26] [out] --> VT_SAFEARRAY [27] */ &$Errors,
// /* VT_PTR [26] [out] --> VT_VARIANT [12] */ &$Qualities,
// /* VT_PTR [26] [out] --> VT_VARIANT [12] */ &$TimeStamps
// )
$opcgroup->SyncRead(
OPC_DS_CACHE, count($serverhandles), $serverhandles, // [in] args
$values, $errors, $qualities, $timestamps // [out] args
);
Expected result:
----------------
Successful call to SyncRead().
Actual result:
--------------
com_exception: Parameter 4: Typkonflikt (= type mismatch)
#0 opc_read_test.php(148): variant->SyncRead(1, 56, Array,
Object(variant), Object(variant), Object(variant), Object(variant))
#1 {main}
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=48061&edit=1