From:             kmb at kai-m-becker dot de
Operating system: Windows XP SP3
PHP version:      5.2.9
PHP Bug Type:     COM related
Bug description:  Exception when passing array by ref to COM method

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 bug report at http://bugs.php.net/?id=48061&edit=1
-- 
Try a CVS snapshot (PHP 5.2):        
http://bugs.php.net/fix.php?id=48061&r=trysnapshot52
Try a CVS snapshot (PHP 5.3):        
http://bugs.php.net/fix.php?id=48061&r=trysnapshot53
Try a CVS snapshot (PHP 6.0):        
http://bugs.php.net/fix.php?id=48061&r=trysnapshot60
Fixed in CVS:                        
http://bugs.php.net/fix.php?id=48061&r=fixedcvs
Fixed in CVS and need be documented: 
http://bugs.php.net/fix.php?id=48061&r=needdocs
Fixed in release:                    
http://bugs.php.net/fix.php?id=48061&r=alreadyfixed
Need backtrace:                      
http://bugs.php.net/fix.php?id=48061&r=needtrace
Need Reproduce Script:               
http://bugs.php.net/fix.php?id=48061&r=needscript
Try newer version:                   
http://bugs.php.net/fix.php?id=48061&r=oldversion
Not developer issue:                 
http://bugs.php.net/fix.php?id=48061&r=support
Expected behavior:                   
http://bugs.php.net/fix.php?id=48061&r=notwrong
Not enough info:                     
http://bugs.php.net/fix.php?id=48061&r=notenoughinfo
Submitted twice:                     
http://bugs.php.net/fix.php?id=48061&r=submittedtwice
register_globals:                    
http://bugs.php.net/fix.php?id=48061&r=globals
PHP 4 support discontinued:          http://bugs.php.net/fix.php?id=48061&r=php4
Daylight Savings:                    http://bugs.php.net/fix.php?id=48061&r=dst
IIS Stability:                       
http://bugs.php.net/fix.php?id=48061&r=isapi
Install GNU Sed:                     
http://bugs.php.net/fix.php?id=48061&r=gnused
Floating point limitations:          
http://bugs.php.net/fix.php?id=48061&r=float
No Zend Extensions:                  
http://bugs.php.net/fix.php?id=48061&r=nozend
MySQL Configuration Error:           
http://bugs.php.net/fix.php?id=48061&r=mysqlcfg

Reply via email to