![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
создать 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...