Не работает пример с COM из мануала

a40

Guest
Не работает пример с COM из мануала

Уважаемые коллеги,

Пытаюсь работать с COM через PHP.
Взял пример из манула, где выполняется соединение с Word'ом.
НЕ работает!!!
Получаю сообщение
Warning: (null)(): Type library value emptyenum is already defined and has a different value in C:\webdata\TimeKeeper\reasonrefresh3.php on line 3

Строка 3 - это создание COM-объекта:
$word = new COM("word.application") or die("Unable to instanciate Word");
Получена путем копирования из мануала.

В чем глюк? Заранее спасибо за советы.
 

a40

Guest
С этим разобрался. Менял настройки в php.ini. Сейчас восстановился значения по умолчанию. Пример из мануала заработал.

Но вот мой собственный COM-объект работать все равно не хочет. Получаю сообщение
"Инстукция по адресу xxxxx обратилась к памяти по адресу yyyyyy. Память не может быть read"

Хотя из delphi те же методы моего COM отрабатывают правильно.

В чем может быть проблема?
 

a40

Guest
>а в dcomcfg твой объект правильно зарегистрирован ?

А это как? (простите за ламерский вопрос).
Свой COM-сервер я как положенно зарегистрировал с помощью regsvr32. Да и Delphi сама при разработке регистрит.

А вот что такое dcomcfg, я, признаться, не знаю :(
Пожалуйста, разъясните.
 

a40

Guest
Делаю так:
$R3 = new COM("SAPLink1_002.r3TimeKeeper_02");
$Buf=$R3->Demo2();
$R3->release();
$R3=null;

Demo2 - это свойство read-only, возвращающее целочисленную константу. Даже если делать свойсво для чтения, все равно не выдается ошибка
"Инструкция по адресу такому-то обратилась к памяти такой-то " Память не может быть read.

Если строку $Buf=$R3->Demo2(); убрать, то ошибка пропадает.
Попытка вызывать любой метод COM также приводит к той же ошибке.
 

a40

Guest
$Buf=$R3->Demo2();
Скобки конечно лишнии. Это я на всякий случай просто проверил. Без скобок то же не работает.
 

Geol

Пациент
Автор оригинала: a40
>а в dcomcfg твой объект правильно зарегистрирован ?

А это как? (простите за ламерский вопрос).
Свой COM-сервер я как положенно зарегистрировал с помощью regsvr32. Да и Delphi сама при разработке регистрит.

А вот что такое dcomcfg, я, признаться, не знаю :(
Пожалуйста, разъясните.
dcomcnfg имелось в виду, набери это в консоли, найди свой объект и посмотри пермишены
 

a40

Guest
Своего объекта в списке dcomcnfg я не обнаружил.
А дожен был? Ведь речь идет о COM, а не DCOM.

К тому же PHP все-таки создает объект и освобождает.
 

Dem anywhere

Guest
я с этим уже сталкивался - надо явно уничтожать ВСЕ созданные СОМ-объекты...
Даже те, на которые нет ссылок :) - ВСЁ, что создал - надо уничтожить
В данном случае - то, что в $Buf
 

a40

Guest
Автор оригинала: Dem anywhere
я с этим уже сталкивался - надо явно уничтожать ВСЕ созданные СОМ-объекты...
Даже те, на которые нет ссылок :) - ВСЁ, что создал - надо уничтожить
В данном случае - то, что в $Buf
Я так и предполагал, что нужно освобождать ВСЕ ссылки на ВСЕ объекты, но ведь в $buf - не COM-объект.

В моем примере Demo2 - это свойство. На него никаких ссылок быть не должно.

Вопрос переехал в теоретическую плоскость - плюнул на все и написал все на ASP. Там с COM никаких проблем.
Хотя после PHP ощущаешь себя инвалидом. Впрочем, думаю, что это от недостатка опыта в ASP.

Но все-таки хотелось бы решать все вопросы на PHP.
 
Сверху