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

COM-объект и слово SET   Найти похожие ветки 

← →
Наиль ©   (2006-06-27 21:21) [0]

Пользуюсь файловым менеджером «Диско Командир» и решил написать к нему plug-in по инструкции http://disco.ru/russian/products/commanderplugins.htm. До этого COM никогда не писал (надобности не было). По инструкции:
Интерфейс IStr служит для передачи символьной информации между ДИСКо Командиром и компонентой расширения и имеет следующий метод:
HRESULT Set([in] LPCSTR str) - установка символьной информации.

Я это понял так:
type
IStr=Interface(IUnknown)
 Function Set(const str: LPCSTR):HResult;
End;

Вопрос:
как выполнить инструкцию, если слово Set использовать нельзя?


← →
Lamer@fools.ua ©   (2006-06-27 21:39) [1]

>как выполнить инструкцию, если слово Set использовать нельзя?

Используйте другое название (например, SetValue). В COM-интерфейсах, если мне не изменяет склероз, важен порядок, а не сами названия.


← →
icWasya ©   (2006-06-28 13:00) [2]

Хорошо бы получить от разработчиков описания интерфейсов на каком-нибудь языке программирования - на С++ или IDL. Например, какой должен быть IID у интерфейса IStr ?


← →
Наиль ©   (2006-06-29 06:47) [3]


> Хорошо бы получить от разработчиков описания интерфейсов
> на каком-нибудь языке программирования - на С++ или IDL.

Согласен. Это первая мысль которая приходит на ум, при прочтении инструкции. Но с другой стороны, инструкция предельно ясна для сишника который написал хотя бы один COM. Но я к ним не отношусь.

> Например, какой должен быть IID у интерфейса IStr ?

В данном случае он не нужен, т.к. IID используется для нахождения DLL через реестр, т.е. позволет подменять путь DLL без вреда для работающих с интервейсом программ. А нам путь к DLL известен заранее. С другой стороны, чужой код должен каким-то образом определить, подходит ли предложеный ему класс под соотвествующий интерфейс.
Сразу хочу сказать, что ни один из перечисленых в инструкции интерфейсов в моём реестре не зарегистрировался. Хотя plug-ins идущие с программой работают.
Но главный вопрос в следующем. Что передётся в качестве экземпляра класса? Аналог VMT (список сылок на методы в определёном порядке) или аналог RTTI (метод можно найти по строковому обозначению). Второе маловероятно, т.к. это уже будет не COM, а ActiveX. Но остаются сомнения, потому что выходит, что разработчик (я) для реализации собственого COM, должен точно знать не только о методах, но и об их порядке.


← →
icWasya ©   (2006-06-29 09:43) [4]

>>В данном случае он не нужен, т.к. IID используется для нахождения DLL через реестр, ...
Я не про это. Вы говорите про CLSID.
>> С другой стороны, чужой код должен каким-то образом определить, подходит ли предложеный ему класс под соотвествующий интерфейс.
А вот для этого каждый интерфейс должен иметь GUID. В метод QueryInterface подаётся именно GUID запрашиваемого интерфейса.
Ну и соответственно
>> разработчик ... должен точно знать не только о методах, но и об их порядке.

А инструкция годится как справочник для понимания, что же должен делать каждый метод каждого интерфейса, но для разработки информации маловато.



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

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



Память: 0.46 MB
Время: 0.026 c
15-1152868726
Сергей М.
2006-07-14 13:18
2006.08.13
TurboPower AsyncPro


2-1153569490
Ivolg
2006-07-22 15:58
2006.08.13
Размер изображния


15-1152911962
Marser
2006-07-15 01:19
2006.08.13
Вынесен вердикт суда по делу четырех суперклубов.


8-1139930392
denis24
2006-02-14 18:19
2006.08.13
резкость изображения при захвате видео через DSPack


2-1153722455
4IZH
2006-07-24 10:27
2006.08.13
путь к windows




   Наверх