COM-интерфейс

Программы на Clarion, шаблоны, библиотеки и пр.

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Привет
Задолбался я руками интерфейсы описывать. Вот генератор (собран на 6-ке, нужны c60ascx и c60runx). Описание в readme.
Был бы рад, если кто погоняет выскажет свою имху.

С уважением, Михаил

1. Ну и зачем мне этот стартовый экранчик каждый раз? :)
2. Не обрабатываюся константы typedef enum

Если в интерфейсе есть

typedef ...
enum {
константа1 = 0
} какие-то_константы

то получаем прототип:

Метод PROCEDURE(*какие-то_константы),HRESULT,RAW,PASCAL,PROC

Есессно типа "какие-то_константы" нет.

Алексей,
начальник отдела ПТО
ООО "ОРК"
mail: alex@jrcn.donetsk.ua, icq: 62605472
www: http://www.nikasoft.co.uk
http://www.clarionline.h1.ru (FAQ-онлайн)
origin: ...А я Вас не узнал без санитара?..
1. Ну и зачем мне этот стартовый экранчик каждый раз? :)
origin: ...А я Вас не узнал без санитара?..
Вот чтоб узнавал ;)
Есессно типа "какие-то_константы" нет.
Посмотрю, исправлю. Мне просто такое не попадалось (не увидел)

Михаил
Написал: ClaList(2)
Гость

Сообщение Гость »

Вчера недопонял, об чём речь. Тип "какие-то_константы" присутствует в списке типов данных в начале inc-файла. Ничто не мешает написать самому "какие-то_константы" EQUATE(LONG) и всех делов.

С уважением, Михаил

Вот пожелания...

1. Имеем следующее описание свойств интерфейса
[id(0x68030020), propput]
HRESULT ServerName([in, out] BSTR* );
[id(0x68030020), propget]
HRESULT ServerName([out, retval] BSTR* );
[id(0x6803001f), propput]

получили
ServerName PROCEDURE(),HRESULT,RAW,PASCAL
ServerName PROCEDURE(),HRESULT,RAW,PASCAL
хотелось бы
SetServerName PROCEDURE(long),HRESULT,RAW,PASCAL
GetServerName PROCEDURE(long),HRESULT,RAW,PASCAL

2. Как ты описываешь метод в котором Variant передается по значению ?
Не адрес структуры ? По идее там нужно передавать 4 LONG переменной.
3. А можно шриф по-больше и Maximize добавить ?
4. Можно ли добавлять суффикс Type к имени класса ? (опционально)
5. Собрать без DLL, не запустилась в 6.1

Сделай open source и тогда вполне достойный продукт получится.

--
Best regards,
Max mailto:Makc@istnet.ru
Написал: ClaList(2)
Гость

Сообщение Гость »

Но дык это-то не тип (в Кларионовских терминах)...

Пример:

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

    typedef [uuid(E76E7294-BD49-11D1-B137-0000F8753F5D), helpstring("Horizontal Alignment Constants"), helpcontext(0x0005d818)]
    enum {
        VtHorizontalAlignmentLeft = 0,
        VtHorizontalAlignmentRight = 1,
        VtHorizontalAlignmentCenter = 2,
        VtHorizontalAlignmentFill = 3,
        VtHorizontalAlignmentFlush = 4
    } VtHorizontalAlignment;
тип - enum VtHorizontalAlignment

HRESULT HorzAlignment([out, retval] VtHorizontalAlignment* HorzAlignment);
[id(0x00000001), propput, helpstring("Defines horizontal alignment of text"), helpcontext(0x0005e036)]

В Кларионвском INC-е:

HorzAlignment PROCEDURE(*VtHorizontalAlignment HorzAlignment),HRESULT,RAW,PASCAL,PROC

И где мне взять тип *VtHorizontalAlignment?! По идее это должен быть какой-нить *LONG.
... и всех делов.
А насчет всех делов...
А если эти EQUATE'ов не 10 и даже не 30? Задолбаешься однако ручками... :) Уж коли назвался груздем... :D

Алексей,
начальник отдела ПТО
ООО "ОРК"
mail: alex@jrcn.donetsk.ua, icq: 62605472
www: http://www.nikasoft.co.uk
http://www.clarionline.h1.ru (FAQ-онлайн)
origin: Вам помочь или не мешать?
Но дык это-то не тип (в Кларионовских терминах)...
LONG это не тип? 8-)
И где мне взять тип *VtHorizontalAlignment?! По идее это должен быть какой-нить *LONG.
VtHorizontalAlignment EQUATE(LONG)
А если эти EQUATE'ов не 10 и даже не 30? Задолбаешься однако ручками... :) Уж коли назвался груздем... :D
То, что внутри enum {} это просто константы, которые передаются методу при
его вызове или возвращаются им, а отнюдь не при описании. При желании
(совсем не обязательно!) можно и их описать как список EQUATEов.
Вобщем, пример выше будет таким:

VtHorizontalAlignment EQUATE(LONG)
HorzAlignment PROCEDURE(*VtHorizontalAlignment
HorzAlignment),HRESULT,RAW,PASCAL,PROC

что, собственно, и должно было быть.

С уважением, Михаил

Эта... может тут собака зарылась? Не все типы данных записывались, сейчас поправил.

Михаил
Написал: ClaList(2)
Гость

Сообщение Гость »

LONG это не тип? 8-)
Я имел в виду "какие-то_константы"... :)
И почему бы не сделать, чтобы прога вставляла такие строки?
Эта... может тут собака зарылась? Не все типы данных записывались, сейчас поправил.
Не... не то...
Ну вот смотри... вот Кларионовский метод из полученного инк-файла:

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

    OLEDragMode         PROCEDURE(*OLEDragConstants psOLEDragMode),HRESULT,RAW,PASCAL,PROC
    OLEDragMode2        PROCEDURE(OLEDragConstants psOLEDragMode),HRESULT,RAW,PASCAL,PROC
Видим тип OLEDragConstants. Поиск по всему файлу не дал предварительного описания этого типа. В оригинале:

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

    typedef enum {
        chOLEDragManual = 0,
        chOLEDragAutomatic = 1
    } OLEDragConstants;
т.е. это просто константы, но константы то нужно передавать как? Как какое-то целое значение (LONG/*LONG)? Да и сами константы хотелось бы видеть как :

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

    OLEDragConstants_chOLEDragManual     EQUATE(0)
    OLEDragConstants_chOLEDragAutomatic  EQUATE(1)
Кстати, предложение заменить "индекс к повторяющимся именам" на слова Get/Set, т.е.

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

    GetOLEDragMode        PROCEDURE(*LONG psOLEDragMode),HRESULT,RAW,PASCAL,PROC
    SetOLEDragMode        PROCEDURE(LONG psOLEDragMode),HRESULT,RAW,PASCAL,PROC
P.S. Понятно? :)

Алексей
Видим тип OLEDragConstants. Поиск по всему файлу не дал предварительного описания этого типа.
Я тут exe-шник оставлял, он и OLEDragConstants, и OLEDropConstants фиксирует.
т.е. это просто константы, но константы то нужно передавать как? Как какое-то целое значение (LONG/*LONG)?
Вообще для чего я типы данных вынес с комментариями наверх? Для контроля.
Подразумевается, что есть один большой inc-файл со всеми этими описаниями типов, вроде windows.h. Если компилер матерится на неизвестный тип OLEDragConstants, мы его аккуратно в этот большой инк вписываем:
OLEDragConstants EQUATE(LONG).

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

     OLEDragConstants_chOLEDragManual     EQUATE(0)
     OLEDragConstants_chOLEDragAutomatic  EQUATE(1)
Это можно, но опять же к описанию интерфейса это относится слабо.

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

     GetOLEDragMode        PROCEDURE(*LONG psOLEDragMode),HRESULT,RAW,PASCAL,PROC
     SetOLEDragMode        PROCEDURE(LONG psOLEDragMode),HRESULT,RAW,PASCAL,PROC
Я так и делаю (ручками :-), автоматизировать надо подумать, там неоднозначно... бывает и 3, и больше методов с одним именем, 2 Get'a, 3 Set'a
P.S. Понятно? :)
Чем из-за ерунды препираться, ошибки б явные поискал. Я вот нашёл.

Михаил
Написал: ClaList(2)
Гость

Сообщение Гость »

Привет, Max!
По поводу Set/Get я уже ответил, добавлю, что обязательно сделаю такую опцию.
Далее.
2. Как ты описываешь метод в котором Variant передается по значению ?
Не адрес структуры ? По идее там нужно передавать 4 LONG переменной.
3. А можно шриф по-больше и Maximize добавить ?
4. Можно ли добавлять суффикс Type к имени класса ? (опционально)
5. Собрать без DLL, не запустилась в 6.1
Сделай open source и тогда вполне достойный продукт получится.
2.
VariantType GROUP,TYPE
vt USHORT
wReserved1 USHORT
wReserved2 USHORT
wReserved3 USHORT
Value LONG
extrapad ULONG
END
3. Если ты убедишь меня в целесообразности
4. Здравая мысль, сделаю
5. Пока будет в таком виде, с длл и в 6.0

Если делать опенсорс, переломится кровать :) Шутка.

С уавжением, Михаил
Гость

Сообщение Гость »

Здравствуйте.

Учёл почти все замечания и предложения в обновлении dpCom.
-описания для enum-типов
-описания для enum-констант
-Get/Set для одноименных методов
-Суффикс для имён интерфейсов (IDispatchType)
-корректная работа с интерфейсами вроде "interface abstract IAbstractInterface"
-корректная работа с типами вроде "unsigned char"
-сохранение настроек
-заставка появляется один раз в день ;)

Надеюсь, Алексей Тимков на досуге потестирует ;)

С уважением, Михаил
Написал: ClaList(2)
Гость

Сообщение Гость »

Михаил, а ты видел как Ингасофт, которая плюс выпустила новый
продукт Easy Com2Inc... :) Уж очень напоминает интерфейс твоей
фишки... странно это...

Алексей,
начальник отдела ПТО
ООО "ОРК"

mail: alex@jrcn.donetsk.ua, icq: 62605472
www: http://www.nikasoft.co.uk
http://www.clarionline.h1.ru (FAQ-онлайн)
origin: Ты бык не потому, что здоровый, а потому, что скотина.

(Добавление)

Не понял, что странно? Что там моей фамилии нигде не упомянуто? Так я самый скромный на земле.
origin: Ты бык не потому, что здоровый, а потому, что скотина.

Как письмо в мой адрес, так очень цитаты интересные. ;^)

С уважением, Михаил

Предлагаю в буржуйских эхах начать раздачу нахаляву проектов с открытыми исходниками, которые табунами бегают по клалисту :)
Кое у кого, правда, приступ может случиться... :)
"Ничего личного" (с) Абдулов

PS. А кто такие "Ингасофт"?

--
Best regards,
Maxim Yemelyanov,
Enigma Soft Company
phone: +380 572 177977
WEB: http://enigmasoft.com.ua
e-mail: clalist@enigmasoft.com.ua
ICQ: 12253836

Дык, если бы бесплатно, а то $99...
Быстро чуваки идейку слямзили... :)
PS. А кто такие "Ингасофт"?
да кто... русские :D

Алексей
Быстро чуваки идейку слямзили... :)
Это понятно. Я не про то. А про то, чтобы Михаил (если не жалко) опубликовал свое творение в буржуйских эхах. Дабы народ мог воспользоваться не платя $99.
Дабы "русские" перед тем как слямзить связывались с автором на предмет разрешения юзания его творения.
Хотя это из разряда фантастики.
да кто... русские :D
Не сомневаюсь :)

--
Best regards,
Maxim Yemelyanov
Хотя это из разряда фантастики.
Ух, какие вы, на оргвыводы скорые :D А не приходила в мозг мысль о другом, нормальном варианте? Мдя ... менталитет не пропьешь :)

Удачи!
__________________________________
Владимир Якимченко (IСQ 16 993 194)
Ух, какие вы, на оргвыводы скорые :)) А не приходила в мозг мысль о другом, нормальном варианте?
Приходила... но после... :-)
Мдя ... менталитет не пропьешь :)
"Цэ точно!" (с)... :)

Алексей

Привет, Максим!
Из=-за чего базар на пустом месте? Никто ничего ни у кого не "лямзил".
И предлагаю замять для ясности

Михаил.
Написал: ClaList(2)
Ответить