Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2017.04.09;
Скачать: [xml.tar.bz2];

Вниз

создать 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.002 c
15-1460136529
aka
2016-04-08 20:28
2017.04.09
Лицензионное ПО


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


2-1439274792
olle
2015-08-11 09:33
2017.04.09
создать oleauto


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


2-1439285376
Masterucs
2015-08-11 12:29
2017.04.09
Delphi XE: изменили FreeAndNil?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский