Работа с Interface()

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Работа с Interface()

Сообщение Игорь Столяров »

Привет всем ! :)

А если у кого-нибудь элементарный пример, как можно вызвать
какую-нибудь функцию Windows через Interface(GUID) ?

А то я сегодня как АвтоВАЗ - что бы ни собирал, все GPF заканчивается ... :)
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Работа с Interface()

Сообщение Дед Пахом »

3 раза перечитал, всё равно ничего не понял :-)
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Работа с Interface()

Сообщение Игорь Столяров »

Уф ! Жарко у нас в Ростове ... Но попробую объяснить. :)

Есть некий COM интерфейс, по реестру Windows знаю его GUID. Есть описание и наименование его методов.
Имею непреодолимое желание его использовать, но не могу это сделать.

Насколько я понимаю по справке, нужно задать описание

Код: Выделить всё

MyLocation    INTERFACE('7FED806D-0EF8-4f07-80AC-36A0BEAE3134'),TYPE
GetLatitude     PROCEDURE(*ulong),long 
GetLongitude   PROCEDURE(*ulong),long  
                    END
MyClass     CLASS,IMPLEMENTS(MyLocation)
                END

Latitude ULong

 CODE
 If MyClass.MyLocation.GetLatitude(Latitude) then Message(Latitude).
И во что-то оно и не работает. Никогда раньше не работал с вызовом COM объектов.
Посмотреть бы какой-нибудь рабочий пример ... но в справке ничего нет. :(
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Работа с Interface()

Сообщение Дед Пахом »

Код шикарный, всё неправильно, кроме END и CODE :-)
Проще всего заюзать OLE контрол и не париться с интерфейсами.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Работа с Interface()

Сообщение Игорь Столяров »

Дед Пахом писал(а):Код шикарный, всё неправильно, кроме END и CODE :-)
Сказать "плохо" может каждый, ты скажи как правильно ... ;)
Я сразу предупредил, что не юзал Interface().

Не хочу я использовать OLE контрол, да и не уверен, что он в этом случае вообще существует.
На мой взгляд идея достаточно простая, механизм ее реализации в Clarion есть, так что мешает ?
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Работа с Interface()

Сообщение Дед Пахом »

рабочие примеры можно посмотреть в EasyCOM2INC от Ingasoft. Если коротко, то надо правильно объявить com-интерфейс, вызвать CoCreateInstance, чтобы получить адрес интерфейса, попутно следить за счётчиками обращений к интерфейсу (AddRef/Release), если объект поддерживает события, то это ещё тот геморрой... Юзай OLE :-)
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Работа с Interface()

Сообщение Игорь Столяров »

Дед Пахом писал(а):то надо правильно объявить com-интерфейс, вызвать CoCreateInstance, чтобы получить адрес интерфейса
Нечто вроде этого я уже начал подозревать ... :)
Буду пытаться, когда жара спадет - как минимум это интересно.
Make Clarion Great Again ! 😎
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Работа с Interface()

Сообщение Игорь Столяров »

Дед Пахом писал(а):рабочие примеры можно посмотреть в EasyCOM2INC от Ingasoft
Посмотрел, действительно все совсем не просто. :(
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Работа с Interface()

Сообщение Дед Пахом »

Без теории будет непросто разобраться. К счастью, в сети полно материалов. Самые интересные с точки зрения клариониста те, где примеры на чистом C, они максимально близки к коду Clarion.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Работа с Interface()

Сообщение Игорь Столяров »

Дед Пахом писал(а):Самые интересные с точки зрения клариониста те, где примеры на чистом C, они максимально близки к коду Clarion.
Спасибо. Ну на классическом С у меня примера нет, пытаюсь разобраться с примером на CPP из Microsoft SDK.
В принципе все несложно и понятно, но достаточно неожиданно оказалось, что реализация в Clarion сделана через ж ...
Здесь нужно попробовать какой-нибудь небольшой рабочий пример, т.е. мы возвращаемся к тому с чего я и начал. :)
Make Clarion Great Again ! 😎
Ответить