Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.13;
Скачать: 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 вся ветка

Текущий архив: 2006.08.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.081 c
15-1152607951
Некто
2006-07-11 12:52
2006.08.13
Беседовал тут с представительницей


2-1153605815
Забывчивый
2006-07-23 02:03
2006.08.13
Треугольник


15-1153045246
прек
2006-07-16 14:20
2006.08.13
Дата изготовления телефона


2-1153663863
userrrrr
2006-07-23 18:11
2006.08.13
подключение


3-1149855807
Vitus
2006-06-09 16:23
2006.08.13
работа с Ole объектами