Форум: "Начинающим";
Текущий архив: 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