| 
        php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
  [2001-06-25 09:00 UTC] andrej dot aschenbrenner at face dot de
 Example:
$user = "test_user";
$allowed = 8;
$instance = new COM("dll.CObject") or die("Unable to
instanciate dll.CObject");
$instance->CheckLogin($user, COM_REMOTE_SERVER, &$allowed);
echo $allowed;
$allowed has always the value that you have specified
above, here: 8; When I change $allowed to 6788, then
I get 6788. It seems that the variable won't be changed
when you pass it by reference.
It doesn't matter if i use the & sign or not!
Note that the variable $allowed have to be integer,
I can't pass a variant type to the COM-Function CheckLogin.
The same has been working with previous versions of PHP,
until 4.0.5 and above.
In need this functionality because i use a lot of stuff
like that: 
$instance->some_function(&$var1, &$var2, &$var3);
any clue, what's going up?
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits             
             | 
    |||||||||||||||||||||||||||
            
                 
                Copyright © 2001-2025 The PHP GroupAll rights reserved.  | 
        Last updated: Tue Nov 04 15:00:01 2025 UTC | 
$user = "test_user"; $allowed = new VARIANT(8, VT_I4|VT_BYREF); $instance = new COM("dll.CObject") or die("Unable to instanciate dll.CObject"); $instance->CheckLogin($user, COM_REMOTE_SERVER, $allowed); echo $allowed->value; /* you can use $allowed->type to check it against * VT_* constants * look into the php documentation for more flags * passing variables by reference is a deprecated * zend feature (i don't know why) and it didn't work * in every case in earlier versions. */I think it's very simple. The COM-Object that I use is compiled with Microsoft Visual C++ 6.0, if it matters. The definition looks like this: interface ICObject: IDispatch { [id(1), helpstring("Methode Init")] HRESULT Init(BSTR bstrUser, long lwinID, BSTR bstrCustomer); [id(2), helpstring("Methode CheckLogin")] HRESULT CheckLogin(BSTR bstrUser, BSTR bstrServer, long *laccess); [id(3), helpstring("Methode CloseData")] HRESULT CloseData(); }; Note, that there is no VARIANT Type! It's only BSTR and LONG. So I get always a type mismatch, when I try to pass variables with $var = new VARIANT(8, VT_I4|VT_BYREF); or $var = new VARIANT("test", VT_BSTR); It doesn't matter, if it's passed by reference or not. I think it's a more general problem. PHP tries to pass the values as type VARIANT, but the interface is of another type (here BSTR or LONG). Of course, I could be wrong. When I pass the values directly as PHP-variables, then I don't get the type-mismatch warning, but the variables passed by reference don't change, as you can see in the first message. I hope, I maked it clear.