Как в PHP сделать передачу (замену) дочернему объекту созданного объекта, другой созданный объект. На VB это выглядит так Set obj1.subobj=obj2 Конкретная задача на VB/VBScript Set spkStrm =CreateObject("SAPI.SpFileStream") Set Voice=CreateObject("SAPI.SpVoice") spkStrm.Open filenameForWrite, SSFMCreateForWrite, False Set Voice.AudioOutputStream = spkStrm Voice.Speak textToSpeech spkStrm.Close Set spkStrm = Nothing Set voice=Nothing Пробую на PHP следующий код $spkStrm = new COM("SAPI.SpFileStream"); $voice = new COM("SAPI.SpVoice"); $spkStrm->Open ($wf, 3, False); $voice->AudioOutputStream = $spkStrm; $voice->Speak ($spk); $spkStrm->Close; unset($spkStrm); unset($voice); Спотыкается на выделенной строке с ошибкой Fatal error: Uncaught exception 'com_exception' with message 'Error [0x80020003] Член группы не найден. ' Следует отметить, что на VB код 100% работает... Как мне запустить на PHP?
borodulin точно вспотыкается на строчке " $voice->AudioOutputStream = $spkStrm; "? Пишите так: $voice->AudioOutputStream = &$spkStrm;
точно на этой строке. прописал &. Код выдал следующую ошибку: Fatal error: Cannot assign by reference to overloaded object in....
borodulin Хм... наверное глюк связан с тем что прицепить пытаетесь к ком объекту... Что выводит код? Код (Text): $spkStrm = new COM("SAPI.SpFileStream"); $voice = new COM("SAPI.SpVoice"); $spkStrm->Open ($wf, 3, False); print (int) isset($voice->AudioOutputStream); print (int) empty($voice->AudioOutputStream); $voice->AudioOutputStream=1;
10<br /> <b>Fatal error</b>: Uncaught exception 'com_exception' with message 'Error [0x80020003] Член группы не найден. Может поможет, если скажу, что изначально $voice->AudioOutputStream имеет количество свойств/функций, отличное от количества в объекте $spkStrm. В объекте $spkStrm на пару свойств больше. Т.е. получается, что по идее нужно подменить старый объект на новый. Как это сделать на PHP незнаю То, что надо подменять объект - это точно. Изначальный пример брал из Speech SDK. Да и код на VB работает нормально...
Ну вот все ясно Это значит что данное свойство есть и уже заполнено. А учитывая ваш коммент получается там еще и объект висит... Сталкивались уже с такой фигней при работе с WMRM SDK, там тоже с VB все чудесно работает - метод нормально вызывается, а с php ни в какую . Попробуйте поискать сначало - может есть метод в SpVoice, который позволяет корректно заменить один дочерний объект на другой. Или попробуйте, сначало удалить этот объект а потом добавить свой... наверное должен быть какой то джеструктор у $voice->AudioOutputStream? хотя конечно можете в лоб попробовать unset($voice->AudioOutputStream);