|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #23155 The COM interface can't support pass by reference
Submitted: 2003-04-10 11:22 UTC Modified: 2003-04-10 18:09 UTC
From: wanght at hotmail dot com Assigned:
Status: Not a bug Package: COM related
PHP Version: 4.3.1 OS: Window 2K English
Private report: No CVE-ID: None
 [2003-04-10 11:22 UTC] wanght at hotmail dot com
I wrote a simple COM object using VC & ATL.

Here a part of code
HRESULT FetchValue([in, out]int* iValue, [out]int* iResult)

STDMETHODIMP CSimpleCom::FetchValue(int* iValue, int* iResult)
	int iTemp = *iValue + 10;
	*iValue = iTemp;
	*iResult = iTemp;
	return S_OK;

I wrote a PHP script to invoke this method. It can't get the new value from this function.

echo "Call Com Object<br>";
$instance = new COM("comtest.SimpleCom"); 

$value = 15; 
$result =10;
$instance->FetchValue(&$value, &$result);
echo "<b>Access function <i>void FetchValue(int*, int*): </i></b>";
echo "Output result: ".$result."<br>";
echo "Output value: ".$value."<br>";

After reading the source code, I found the function php_pval_to_variant in conversion.c didn't check if the variale is passed by reference. Am I right? Maybe this is the problem.

By the way, this is a little bug in the COM interface function.

php_VARIANT_call_function_handler (VARIANT.c)
call function VariantInit(), and then call php_pval_to_variant_ex(conversion.c) --> php_pval_to_variant_ex2(conversion.c), the function VariantInit() has been called again. 

But in another invocation path
do_COM_invoke(COM.c) -> php_pval_to_variant(conversion.c) -> php_pval_to_variant_ex2, the function VariantInit() is only invoked once.


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2003-04-10 18:09 UTC]
Sorry, but your problem does not imply a bug in PHP itself.  For a
list of more appropriate places to ask for help using PHP, please
visit as this bug system is not the
appropriate forum for asking support questions. 

Thank you for your interest in PHP.

call time pass by reference is a deprecated feature, use the variant class instead.
PHP Copyright © 2001-2023 The PHP Group
All rights reserved.
Last updated: Wed Feb 01 04:03:45 2023 UTC