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

COM: причуды реализации на Delphi   Найти похожие ветки 

← →
mifril   (2004-03-02 01:00) [0]

Друг просит помочь ему разобраться.

Столкнулся я на днях со следующей интересной проблемой. В детали посвящаю и Вас, надеюсь будет интересно поломать над нею голову, разделяя мою нелегкую участь. Итак, задача в следующем. Имеется ActiveX Library, в которую добавлено два Automation Object. Требуется, чтобы один из объектов, пусть, скажем, ему соответствует класс TPlugin и интерфейсы IPlugin/IPluginDisp, при своей инициализации (пусть она происходит вызовом функции-члена Init) создавал экземпляр другого объекта, TFeature, которому соответствуют интерфейсы IFeature/IFeatureDisp, и впоследствии предоставлял к созданному экземпляру этого объекта доступ через свое общедоступное read-only свойство, что-то в таком духе:

TPlugin = class(TAutoObject, IPlugin)
protected
procedure Init; safecall;
function Get_Feature: IFeature; safecall;
private
fFeature: TFeature;
end;


Соответствующий интерфейс выглядят так:

ICore = interface(IDispatch)
["{...}"]
procedure Init(const lpUnk: IUnknown); safecall;
function Get_Feature: IFeature; safecall;
property Feature: IFeature read Get_Feature;
end;


В методе Init происходит примерно следующее:

procedure TPlugin.Init;
begin
fFeature:= TFeature.Create;
end;


Ну а что делает Get_Feature догадаться несложно - возвращает fFeature.
Так вот, требуется, например, чтобы на JScript можно было написать такой код:

var MyPlugin=new ActiveXObject("MyLib.Plugin");
if (MyPlugin) MyPlugin.Feature.SayHello();


где SayHello - какой-нибудь метод объекта TFeature.
В таком виде как это реализовано у меня, подобный код выдает ошибку JScript о том, что

MyPlugin.Feature есть null или не является объектом

Я также пробовал возвращать через функцию Get_Feature не интерфейс IFeature а IUnknown, и тип OleVariant. Ничего не помогает. В чем может быть загвоздка? Огромная просьба, братья по разуму, помогите коллеге в смятении, это важный момент, из-за него встал большой и серьезный проект.


← →
nikkie ©   (2004-03-02 01:17) [1]

гы гы гы.
по-моему твой друг на прошлой неделе уже тут был.
и ему уже ответили.
http://delphimaster.net/view/1-1077674708/
так что это не причуды COM, а программерские причуды :))


← →
mifril   (2004-03-02 02:08) [2]

ХЫ =) Чудной товарищ. Забыл что-ли, что был здесь. В любом случае, спасибо за помощь :)



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

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



Память: 0.45 MB
Время: 0.019 c
14-43889
olookin
2004-02-20 18:31
2004.03.14
А как?


3-43384
}|{yk
2004-02-18 13:59
2004.03.14
Процедуры, возвращающие набор значений в Оракле


3-43361
Sirus
2004-02-14 06:48
2004.03.14
DISTINCT по нескольким полям???


4-43938
Zin
2004-01-07 10:15
2004.03.14
Как с помощью ReadFile прочитать Определенный сектор


8-43699
Romaa
2003-11-07 10:18
2004.03.14
TIcon -- только 16 цветов ?




   Наверх