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

Вниз

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 вся ветка

Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.012 c
1-43678
Ivolg
2004-03-01 18:18
2004.03.14
Прозрочность


1-43637
Budy
2004-03-02 12:46
2004.03.14
New PopupMenu


3-43335
Expo
2004-02-13 15:24
2004.03.14
Дата в RxQuery


14-43808
Slava_333
2004-02-22 16:37
2004.03.14
Какой инструмент выбрать для создания сайта?


14-43842
Думкин
2004-02-22 06:14
2004.03.14
С днем рождения! 22 февраля.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский