Страница 1 из 1
Работа с Interface()
Добавлено: 16 Август 2014, 20:11
Игорь Столяров
Привет всем !
А если у кого-нибудь элементарный пример, как можно вызвать
какую-нибудь функцию Windows через Interface(GUID) ?
А то я сегодня как АвтоВАЗ - что бы ни собирал, все GPF заканчивается ...

Re: Работа с Interface()
Добавлено: 17 Август 2014, 1:36
Дед Пахом
3 раза перечитал, всё равно ничего не понял

Re: Работа с Interface()
Добавлено: 17 Август 2014, 10:53
Игорь Столяров
Уф ! Жарко у нас в Ростове ... Но попробую объяснить.
Есть некий 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 объектов.
Посмотреть бы какой-нибудь рабочий пример ... но в справке ничего нет.

Re: Работа с Interface()
Добавлено: 17 Август 2014, 12:02
Дед Пахом
Код шикарный, всё неправильно, кроме END и CODE

Проще всего заюзать OLE контрол и не париться с интерфейсами.
Re: Работа с Interface()
Добавлено: 17 Август 2014, 12:10
Игорь Столяров
Дед Пахом писал(а):Код шикарный, всё неправильно, кроме END и CODE

Сказать "плохо" может каждый, ты скажи как правильно ...

Я сразу предупредил, что не юзал Interface().
Не хочу я использовать OLE контрол, да и не уверен, что он в этом случае вообще существует.
На мой взгляд идея достаточно простая, механизм ее реализации в Clarion есть, так что мешает ?
Re: Работа с Interface()
Добавлено: 17 Август 2014, 13:21
Дед Пахом
рабочие примеры можно посмотреть в EasyCOM2INC от Ingasoft. Если коротко, то надо правильно объявить com-интерфейс, вызвать CoCreateInstance, чтобы получить адрес интерфейса, попутно следить за счётчиками обращений к интерфейсу (AddRef/Release), если объект поддерживает события, то это ещё тот геморрой... Юзай OLE

Re: Работа с Interface()
Добавлено: 17 Август 2014, 13:27
Игорь Столяров
Дед Пахом писал(а):то надо правильно объявить com-интерфейс, вызвать CoCreateInstance, чтобы получить адрес интерфейса
Нечто вроде этого я уже начал подозревать ...

Буду пытаться, когда жара спадет - как минимум это интересно.
Re: Работа с Interface()
Добавлено: 17 Август 2014, 20:59
Игорь Столяров
Дед Пахом писал(а):рабочие примеры можно посмотреть в EasyCOM2INC от Ingasoft
Посмотрел, действительно все совсем не просто.

Re: Работа с Interface()
Добавлено: 17 Август 2014, 21:26
Дед Пахом
Без теории будет непросто разобраться. К счастью, в сети полно материалов. Самые интересные с точки зрения клариониста те, где примеры на чистом C, они максимально близки к коду Clarion.
Re: Работа с Interface()
Добавлено: 17 Август 2014, 21:34
Игорь Столяров
Дед Пахом писал(а):Самые интересные с точки зрения клариониста те, где примеры на чистом C, они максимально близки к коду Clarion.
Спасибо. Ну на классическом С у меня примера нет, пытаюсь разобраться с примером на CPP из Microsoft SDK.
В принципе все несложно и понятно, но достаточно неожиданно оказалось, что реализация в Clarion сделана через ж ...
Здесь нужно попробовать какой-нибудь небольшой рабочий пример, т.е. мы возвращаемся к тому с чего я и начал.
