Вниз
Скачать: CL | DM;

Ошибка вызова метода COM-сервера.   Найти похожие ветки 

← →
DmitryNM   (2002-08-31 18:38) [0]

Есть внутренний COM-сервер. У него есть метод Convert:
function TAreaUnitConverter.Convert(Quantity: Double; InUnit,
OutUnit: SYSINT): Double;
Вобщем - функция как функция.
Сервер создается нормально:
var V:Variant;
V:=CreateOleObject(UnitSrv.AreaUnitConverter);

Однако при вызове этого метода:
V.Convert(1.0,0,1);
выдается ошибка "Invalid Callee"

И это при том, что если создавать этот же сервер по другому:

var I:IAreaUnitConverter;
I:=CoAreaUnitConverter.Create;

Метод I.Convert(1.0,0,1)

выполняется.

Также ошибка возникает при создании сервера через интерфейс диспетчирования:

var DI:IAreaUnitConverterDisp;
DI:=CoAreaUnitConverter.create as IAreaUnitConverterDisp;

Подскажите - в чем ошибка?
(Пример взят из книги)


← →
Dimk   (2002-08-31 22:31) [1]

Может IAreaUnitConverter не является disp интерфейсом?
Если
var V:Variant;
V:=CreateOleObject(UnitSrv.AreaUnitConverter);
то как я понимаю V присваивается указатель на IDispatch



← →
DmitryNM   (2002-09-02 11:12) [2]

Нет - IAreaUnitConverter является Disp-интерфейсом.
Вот как объявлено в tlb-файле:
IAreaUnitConverter = interface(IDispatch)
["{019B9D28-D5EE-4952-91C5-D39843F6FA76}"]
function Convert(Quantity: Double; InUnit: SYSINT; OutUnit: SYSINT): Double; safecall;
end;

IAreaUnitConverterDisp = dispinterface
["{019B9D28-D5EE-4952-91C5-D39843F6FA76}"]
function Convert(Quantity: Double; InUnit: SYSINT; OutUnit: SYSINT): Double; dispid 5;
end;



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.01 c
1-35724
Brand
2002-09-02 23:48
2002.09.12
Расшифруйте ошибку.


1-35698
Суриков Вадим
2002-09-01 16:33
2002.09.12
Подскажите пожалуйста, как перехватить Ctrl-Alt-Del.


1-35817
Cr@sh
2002-08-31 14:29
2002.09.12
Вопрос по использованию dll


1-35745
Vico
2002-08-30 09:57
2002.09.12
Color


14-35862
andrei dmitriev
2002-08-16 12:03
2002.09.12
Проблемы с созданием инсталяшки, при использовании BDE или ADO...




   Наверх