Bug #11658 Updated: Getting values by reference don't work

From: Date: Mon, 02 Jul 2001 09:08:05 +0000
Subject: Bug #11658 Updated: Getting values by reference don't work
Groups: php.dev 
Request: Send a blank email to php-dev+get-58655@lists.php.net to get a copy of this message
ID: 11658 User Update by: andrej.aschenbrenner@face.de Status: Open Bug Type: COM related Operating system: Windows NT 4.0 SP 6 PHP Version: 4.0.6 Description: Getting values by reference don't work 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. Previous Comments: --------------------------------------------------------------------------- [2001-07-01 17:25:28] phanto@php.net type mismatch means, that your com object expects another type. as you see the error message is german so the error doesn't happen in php but in the com-marshaller. you have to check what type your object expects and change the VT_I4 to the corresponding value. if you can provide me an other example so that i can reproduce this on my machine i could help you more detailed --------------------------------------------------------------------------- [2001-06-28 03:12:59] andrej.aschenbrenner@face.de still closed? --------------------------------------------------------------------------- [2001-06-27 04:16:21] andrej.aschenbrenner@face.de It didn't work! I get this: Warning: Invoke() failed: Typ paßt nicht. in D:wwwwebzeapplicationindex.php on line 10 translated: ...: Type mismatch. Line 10 looks like this: $instance->CheckLogin($user, COM_REMOTE_SERVER, $allowed); I have tried all of the combinations I could think of, VT_UI1|BYREF, VT_UI2|BYREF, VT_UI4|BYREF, VT_I1|BYREF, VT_I2|BYREF, VT_I4|BYREF, VT_INT|BYREF, VT_UINT|BYREF It doesn't matter. I get always the same type mismatch warning. Note that the variable $allowed in the function of the COM-Object is defined as "long". Please help me to get this working. --------------------------------------------------------------------------- [2001-06-26 10:19:19] phanto@php.net closed --------------------------------------------------------------------------- [2001-06-26 10:19:03] phanto@php.net $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. */ --------------------------------------------------------------------------- The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online. Full Bug description available at: http://bugs.php.net/?id=11658

« previous php.dev (#58655) next »