Форум: "Основная";
Текущий архив: 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