Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.04.09;
Скачать: CL | DM;

Вниз

создать oleauto   Найти похожие ветки 

 
olle ©   (2015-08-11 09:33) [0]

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

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


 
han_malign ©   (2015-08-11 11:04) [1]

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

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


 
Dimka Maslov ©   (2015-08-11 12:03) [2]


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


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


 
han_malign ©   (2015-08-11 12:30) [3]


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

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


 
olle ©   (2015-08-11 20:57) [4]

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

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

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

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

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


 
icWasya ©   (2015-08-12 11:32) [5]

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


 
olle ©   (2015-08-12 13:31) [6]

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



Страницы: 1 вся ветка

Текущий архив: 2017.04.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.006 c
15-1458584450
Kilkennycat
2016-03-21 21:20
2017.04.09
Прощай, авиамоделизм.


15-1454583291
KSergey
2016-02-04 13:54
2017.04.09
Вопрос про ASM команду sub


2-1439375893
GAZot
2015-08-12 13:38
2017.04.09
Пакетная передача данных по протоколу UDP


15-1459970604
K-1000
2016-04-06 22:23
2017.04.09
Кто играет в шахматы?


2-1439406925
oleg_teacher
2015-08-12 22:15
2017.04.09
Вопрос взаимодействия Delphi и Excel