php.net |  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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: wanght at hotmail dot com
New email:
PHP Version: OS:

 

 [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.

<?php
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>";
$instance->release(); 
?>

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.







Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2003-04-10 18:09 UTC] phanto@php.net
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 http://www.php.net/support.php 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-2024 The PHP Group
All rights reserved.
Last updated: Sun Dec 22 00:01:30 2024 UTC