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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.048 c
6-1143533342
Sasha73
2006-03-28 12:09
2006.08.13
Копирование файлов по ЛВС с авторизацией?


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


11-1131084045
Vladimir Kladov
2005-11-04 09:00
2006.08.13
Версия 2.20


4-1145447500
Elen
2006-04-19 15:51
2006.08.13
Определение загруженности процессора


15-1149183547
tesseract
2006-06-01 21:39
2006.08.13
футболка DelphiMaster





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