Bug #72922 [Opn->Csd]: COM called from PHP does not return out parameters

From: Date: Thu, 25 Aug 2016 10:15:26 +0000
Subject: Bug #72922 [Opn->Csd]: COM called from PHP does not return out parameters
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-203536@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=72922&edit=1

 ID:                 72922
 Updated by:         ab@php.net
 Reported by:        mistr111 at yahoo dot com
 Summary:            COM called from PHP does not return out parameters
-Status:             Open
+Status:             Closed
 Type:               Bug
 Package:            COM related
 Operating System:   Windows Server 2008 R2 Standard
 PHP Version:        7.0.10
 Block user comment: N
 Private report:     N

 New Comment:

Automatic comment on behalf of ab
Revision: http://git.php.net/?p=php-src.git;a=commit;h=392c5ea472145a8f15b78376d0ab155b16bbab43
Log: Fixed bug #72922 COM called from PHP does not return out parameters


Previous Comments:
------------------------------------------------------------------------
[2016-08-23 07:23:03] mistr111 at yahoo dot com

Hello, thanks for responding so quickly.

COM registration:
regsvr32 comTest.dll

comTest.dll is created in Embarcadero® Delphi 10 Seattle Version 23.0.21418.4207
(I have used COM objects created even in older versions of Delphi for almost a decade and it worked
fine).
comTest.dll was created just for testing purposes. I tested this exact version today with php 5.6 on
the same server and it worked OK.
Then with proper VC14 Win32 version of Apache and VC14 x86 PHP 7.0.10 and it returns correct result,
but in/out parameters keep input values instead of values provided inside COM.
I will send you an e-mail with the Delphi project (contains dlls - both Wind32 and Win64 versions)
and description of both php and apache setups(I do not know how to enclose it here).
The php test script and outputs for both versions will be enclosed. Both setups use 32-bit versions
but results for 64-bit versions are the same.
  

Method in COM object:

function TcomTestIF.test(const Param1: WideString; var Param2, Param3: WideString): WideString;
var res : string;
begin
  res := 'Param1=' + Param1 + '; Param2=' + Param2 + '; Param3=' +
Param3;
  Param2 := 'Output text Param2';
  Param3 := 'Output text Param3';
  Result :=  res;
end;

------------------------------------------------------------------------
[2016-08-22 17:04:21] ab@php.net

Thanks for the report. Please post the test class, or better a test project, along with the way you
register the class and other setup. Also need the current/expected output to compare.

Thanks.

------------------------------------------------------------------------
[2016-08-22 14:55:50] mistr111 at yahoo dot com

Description:
------------
I have a problem concerning COM support in PHP 7.
I have been using COM called from PHP applications for a very long time.
After calling new COM(... , I used to call methods with several in/out parameters.
The result is used just to check status of the call but data is extracted from in/out parameters.
Everything has worked just fine in different PHP versions for almost a decade till I tried PHP 7.
I am able to call methods and can access results without problems, but in/out parameters stay the
same after the call.
I carried out tests on the same machine with PHP 5.6 and everything worked OK.
When I switched to PHP 7 or beta PHP 7.1, output parameters were unaffected only result was
correctly filled out.
(It did not matter whether I used 32-bit or 64-bit versions).

I used Windows Server 2008 R2 Standard for testing.
Binaries for PHP from http://windows.php.net/download/ and http://windows.php.net/qa/ (PHP 7.0.10 - VC14 x86 Thread Safe,
VC14 x64 Thread Safe and PHP 7.1.0 beta2)
For Apache from https://www.apachelounge.com/download/ (Apache
2.4.23 Win64, Apache 2.4.23 Win32)
with appropriate,latest C++ Redistributables installed
I combined 32-bit versions of COM, Apache, PHP and then 64-bit versions with the same result. 

Test script:
---------------
<?php
$comTest = new COM("comTest.comTestIF") or die("Unable to instantiate comTest");
$parIn="111";$parOut1="";$parOut2="";
$result = $comTest->test($parIn,$parOut1,$parOut2);
// after the call $parOut1,$parOut2 parameters are unaffected although they are changed inside com.
Only result is correct
?>



------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=72922&edit=1


Thread (7 messages)

« previous php.bugs (#203536) next »