Инициализация COM объекта с параметрами

mergen

Новичок
Инициализация COM объекта с параметрами

Уважаемые коллеги, возник следующий вопрос:
Возможно ли, при инициализации COM объекта в PHP задавать параметры.
Т.е., если у объекта конструктор без параметров то все нормально

$obj1 = new COM(“MyObj”);

а как быть, если конструктор требует параметры?
Что то подобное
$obj1 = new COM(“MyObj(‘var1’)”);

Заранее благодарен, Вячеслав.
 

mergen

Новичок
Автор оригинала: Panchous
может фабрику для этого использовать?
можно добавить пару слов? не совсем понятно что вы имеете ввиду

Автор оригинала: Andreika
конструктор какого COM объекта требует параметры? %)
Это объекты поставляемые ESRI, так называемые ArcObjects.

Вы считаете, что COM не может иметь конструктор с параметрами?
 

Andreika

"PHP for nubies" reader
хз ) особо не специалист, но вроде COM объект вообще не имеет явного конструктора (конструктор вызывается в его фабрике) %)
 

Panchous

Павел
mergen, вы знакомы с СОМ?
есть такое понятие, как фабрика классов - это объект, который создает другие объекты (и проводит нужную инициализацию).
MSDN
 

mergen

Новичок
Автор оригинала: Panchous
mergen, вы знакомы с СОМ?
есть такое понятие, как фабрика классов - это объект, который создает другие объекты (и проводит нужную инициализацию).
MSDN
откровенно говоря столкнулся впервые, поэтому такие пробелы. спасибо за идею, попробуем порыть в этом направлении.

есть еще какие либо мысли друзья?
 

Panchous

Павел
а есть возможность создать объект с параметрами по-умолчанию, а потом их изменить.
конструктор пустой есть?
 

mergen

Новичок
Автор оригинала: Panchous
а есть возможность создать объект с параметрами по-умолчанию, а потом их изменить.
конструктор пустой есть?
в этом то и проблема, конструктора пустого нет, и все откомпилировано, переопределить не получится
 

Panchous

Павел
вопрос не в PHP.
либо MSDN, либо - к разработчикам того самого СОМ-объекта.
 

Andreika

"PHP for nubies" reader
mergen
смари.. код на дельфях

Document := CreateComObject(CLASS_DOMDocument30) as IXMLDOMDocument2;
Document.async := false;
Document.load(DocumentName);

нет конструктора, нет ... где-то есть объект, у тебя есть его интерфейс (IXMLDOMDocument2)... у этого интерфейса есть функция load() - загружает xml - можно сказать конструктор

а как у тебя чего описано? какой такой конструктор ты вызвать хочешь? какие параметры? откуда ты их набрал?
 

Panchous

Павел
Andreika, не мути человеку голову (еще VB-код приведи...)
кому нафиг нужны твои "дельфя"?
у СОМ-объекта может быть конструктор с параметрами.
для создания такого объекта обычно используют фабрики.
 

mergen

Новичок
Автор оригинала: Panchous
вопрос не в PHP.
либо MSDN, либо - к разработчикам того самого СОМ-объекта.
Давайте попробуем подитожить.
Если я правильно понял, иницализация COM объекта происходит в следующем виде:
$obj1 = new COM(“MyObj”);
и не как иначе(т.е. без всяких параметров).
В этот момент вызывается фабрика которая и инициализирует сам объект.

если имеется откомпелированный объект, то вопрос практически не решаем, если не брать во внимание контакт с разработчиками.

Можно еще один вопрос?

На самом деле, данные объекты базируются на DOTNET классах, и предназначены для работы в .Framework.
Появилась идея использовать это все ч\з PHP. Попытка работы с данными класами чере PHP DOTNET инициализатор не удалась, даже после того как был установлен последний snapshot php5.

Попыталсяф пойти другим путем, ч\з COM. Змарегестрировав dll удалось инициализироватьодин из объектов, но при попытке инициализации другого(из тойже dll) была получена ошибка:

[13-Oct-2005 14:01:47] PHP Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `ESRI.ArcGIS.Server.WebControls.WebMap': Синтаксическая ошибка
' in C:\apps\TBDPR_ISS\weblevel\RootWeb\Html\test.phtml:5
Stack trace:
#0 C:\apps\TBDPR_ISS\weblevel\RootWeb\Html\test.phtml(5): com->com('ESRI.ArcGIS.Ser...')
#1 {main}
thrown in C:\apps\TBDPR_ISS\weblevel\RootWeb\Html\test.phtml on line 5

посмотрев на оба объекта, было замечено что у первого(который инициализировался нормально) есть пустой конструктор(т.е. без параметров) у второго все конструкторы с параметрами.

В силу не больших знаний в COM технологиях, я могу глубоко заблуждаться и может даже дело не в PHP.

Хотелось бы получить коментарии на мое сообщение, если это не затруднит.
Спасибо.
 

Panchous

Павел
Если я правильно понял, иницализация COM объекта происходит в следующем виде:
$obj1 = new COM(“MyObj”);
и не как иначе(т.е. без всяких параметров).
В этот момент вызывается фабрика которая и инициализирует сам объект.
неправильно понял.
фабрика - отдельный обект, у которого есть метод для создания твоего класса. СМ ССЫЛКУ.
например:
$fac = new COM("MyClassFactory"); // экземпляр фабрики
$obj = $fac->CreateInstance(); // теперь в $obj - твой объект

фабрики может и не быть - вопрос к разработчикам...

Есть примеры использования злополучного объекта?
какой код выдал приведенную ошибку?
 

Andreika

"PHP for nubies" reader
ой.. изьвините... раз в COM появились конструкторы с деструкторами, фабрики com-объектов, то я далеко отстал от поезда... не буду мешать создавать фабрики )
мы сами не местные, поможите чем можите...
 

mergen

Новичок
Автор оригинала: Panchous
неправильно понял.
фабрика - отдельный обект, у которого есть метод для создания твоего класса. СМ ССЫЛКУ.
например:
$fac = new COM("MyClassFactory"); // экземпляр фабрики
$obj = $fac->CreateInstance(); // теперь в $obj - твой объект

фабрики может и не быть - вопрос к разработчикам...

Есть примеры использования злополучного объекта?
какой код выдал приведенную ошибку?
Примеров использования нет, по этому и плаваем.

код следующий, но не уверен что это поможет:

<?
$ServerConnection = new COM("ESRI.ArcGIS.Server.WebControls.ServerConnection");
$ServerConnection->Host="my_host";

$WebMap = new COM("ESRI.ArcGIS.Server.WebControls.WebMap"); // падает в этом месте
?>

у первого объекта как я и коговрил есть пустой конструктор, у второго нет.
 

Panchous

Павел
Автор оригинала: Andreika
ой.. изьвините... раз в COM появились конструкторы с деструкторами, фабрики com-объектов, то я далеко отстал от поезда... не буду мешать создавать фабрики )
мы сами не местные, поможите чем можите...
они не появились, а всегда были. СОМ - объекты - классы с конструкторами, деструкторами и функциями (как и все прочие). Если интересно - догоняйте "поезд" по MSDN :)

mergen, ИМХО вариант один - к разработчикам...
 

Andreika

"PHP for nubies" reader
Panchous
эти самые классы пишутся на (никому не нужных©) вполне конкретных языках (с++, дельфя и т.д.), конструкторы которых (при необходимости) и вызывает (уже созданный) экземпляр фабрики классов(которая знает когда, что и с какими параметрами надо вызывать для "создания" объекта).. к com эти конструкторы вообще отношения не имеют... и вызвать их извне невозможно - в com объекте их просто не существует, как не существует и функций, есть только интерфейсы
 

Panchous

Павел
mergen,
The COM class allows you to instantiate an OLE compatible COM object and call its methods and access its properties.
 
Сверху