Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

создать oleauto


olle ©   (2015-08-11 09:33:00) 

каким образом это делается?
нужно: создать oleauto объект, у которого методы могут возвращать не HRESULT

создаю activex library, добавляю automation object и интерфейс от iDispatch.
в интерфейс добавляю метод test возвращающий variant_bool
орет, что методы интерфейса атовматизации должны возвращать HRESULT


olle   (2015-08-12 13:31:00) [1]

все оказалось проще.
сом-объект 32 битный, я проверял его доступность в vbs скрипте.
так как ось 64 бита, то по дефолту запускался 64-битный скриптер, который не видит 32 разрядные объекты зарегистрированные через regsvr32


icWasya   (2015-08-12 11:32:00) [2]

Если сделаешь ActiveX Library, и к ней уже добавишь свой COM-объект, то эту Library можно будет регистрировать точно таким же образом.
А вот если  COM-объект будет находиться в EXE - то придётся заморачиваться с dcomcnfg.


olle   (2015-08-11 20:57:00) [3]

ок, так получилось.
в тлб сгенерилась именно функция  safecall

а еще вот непонятность:
если сделать такое же в VS 6.0 получаем dll и после регистрации ее из командной строки объект уже доступен из скриптовых языков.

в D7 приходится делать run->Install Com Objects
при этом оно спрашивает в куда поместить мою билиотеку.
сама библиотека при это появляется в dcomcnfg и там можно дать права на вызов.

а объект рожденный в VS там же не виден, хотя и доступен сразу.

как же регистрировать библиотеку сваренную в D7? Имеется ввиду на целевой машине где IDE нет?


han_malign   (2015-08-11 12:30:00) [4]


> function Test(out vb: variant_bool): HRESULT safecall;

- safecall- подразумевает...
function Test(out vb: variant_bool): HRESULT; stdcall;
<==>
function Test: variant_bool; safecall;


Dimka Maslov   (2015-08-11 12:03:00) [5]


> методы интерфейса атовматизации должны возвращать HRESULT


Правильно орёт, либо у нас абстрактные классы и мы сами занимаемся связыванием, либо OLE, когда любой метод должен быть объявляен как функция,
возвращающая HRESULT и имеющая модификатор safecall. Значит в данном случае нам надо писать
function Test(out vb: variant_bool): HRESULT safecall;


han_malign   (2015-08-11 11:04:00) [6]

safecall
параметр с атрибутом [out, retval]- будет трактоваться как возвращаемое значение, а настоящий реузльтат- который HRESULT - вылетит исключением, если не S_OK...

Либо чистый Interface- который допускает произвольный контракт метода - но это уже не OLE, и уж тем более не Automation...


Наверх

Титульная страница Поиск, карта сайта Написать письмо