Edit report at https://bugs.php.net/bug.php?id=63164&edit=1
ID: 63164 Updated by: paj...@php.net Reported by: gospodin dot p dot zh at gmail dot com Summary: PHP extension for COM connection Status: Not a bug Type: Bug Package: COM related Operating System: Windows PHP Version: 5.4.7 Block user comment: N Private report: N New Comment: Please let continue this discussion on pecl-dev Previous Comments: ------------------------------------------------------------------------ [2012-09-27 09:38:50] gospodin dot p dot zh at gmail dot com [2012-09-27 08:47 UTC] paj...@php.net i need to store single (only one) instance of COM launched application for all PHP session. That's why i've started to write extension. Can you advice me good existing COM extension ? May be than i'll will use my self-male extension only to store a COM variable. ------------------------------------------------------------------------ [2012-09-27 08:47:37] paj...@php.net hi! Please ask support questions about php extension development on the PECL developer mailing list. Btw, why not contribute to the existing COM extension instead? ------------------------------------------------------------------------ [2012-09-27 08:41:54] gospodin dot p dot zh at gmail dot com i've checked memory dump, seems like strings were additionally processed for slashes as escape sequences. Here is print screen http://imageshack.us/a/img10/2097/phpu.gif ------------------------------------------------------------------------ [2012-09-26 14:28:45] gospodin dot p dot zh at gmail dot com Description: ------------ char* Connect1c77(char* dir, char* username, char* password, bool no_splash_screen){ //Ð´Ð»Ñ Ð½Ð°Ñала иниÑиализиÑÑем COM HRESULT hr = CoInitialize(NULL); if(FAILED(hr)) { return"Ðевозможно иниÑиализиÑоваÑÑ COM!"; return FALSE; } CLSID cls77; hr = CLSIDFromProgID(L"V77M.Application", &cls77); if(FAILED(hr)) { return"ÐеÑеÑÑÑановиÑе 1С ÐÑедпÑиÑÑие!"; CoUninitialize(); return FALSE; } IDispatch *pv77; hr = CoCreateInstance(cls77, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&pv77); if(FAILED(hr) || !pv77) { return"Ðевозможно иниÑиализиÑоваÑÑ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ 1С ÐÑедпÑиÑÑиÑ"; CoUninitialize(); return FALSE; } VARIANT vRet; DISPID dispIDRmTrade, dispIDInitialize; DISPPARAMS args = {0, 0, 0, 0}; VARIANT vars[3]; // ÐаÑамеÑÑÑ Ð´Ð»Ñ Ð²Ñзова Initialize BSTR rmTrade = L"RMTrade"; hr = pv77->GetIDsOfNames(IID_NULL, &rmTrade, 1, 0, &dispIDRmTrade); if (FAILED(hr)) { return"Ðевозможно полÑÑиÑÑ ID Ð¾Ñ RMTrade"; if (pv77) pv77->Release(); CoUninitialize(); return FALSE; } hr = pv77->Invoke(dispIDRmTrade, IID_NULL, 0, DISPATCH_PROPERTYGET, &args, &vars[2], NULL, NULL); if (FAILED(hr)) { return"Ðевозможно полÑÑиÑÑ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ Ð¾Ñ RMTrade"; if (pv77) pv77->Release(); CoUninitialize(); return FALSE; } //нÑжно полÑÑиÑÑ ID Ð´Ð»Ñ Initialize(..); BSTR init = L"Initialize"; hr = pv77->GetIDsOfNames(IID_NULL, &init, 1, 0, &dispIDInitialize); if (FAILED(hr)) { return"Ðе ÑдалоÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ID Ð¾Ñ Initialize"; if (pv77) pv77->Release(); CoUninitialize(); return FALSE; } args.cArgs = 3; args.rgvarg = vars; std::wstring path = L"/DC:\\Users\\Public\\Documents\\old\\Steklo\\ /Nya /P185224"; vars[0] = _variant_t(no_splash_screen ? L"NO_SPLASH_SHOW" : L""); vars[1] = _variant_t(path.c_str());; hr = pv77->Invoke(dispIDInitialize, IID_NULL, 0, DISPATCH_PROPERTYGET, &args, &vRet, NULL, NULL); if(FAILED(hr) || (vRet.vt == VT_BOOL && vRet.bstrVal == 0x00)) { return"Ðевозможно запÑÑÑиÑÑ 1С ÐÑедпÑиÑÑие"; } return "ok"; } Actual result: -------------- This code work fine if compiled like Win32 application. When i make it a part of PHP extension (dll) and call from PHP script started program behaves like path std::wstring path = L"/DC:\\Users\\Public\\Documents\\old\\Steklo\\ /Nya /P185224"; is incorrect, but there is no any windows or messages of course. Stated program is in memory has size like there exists only windows to enter correct path (such window is shown if it's a win32 application, not a PHP extension). Help me somehow please ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=63164&edit=1