• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Горячие точки

Автор noales, 16.01.11, 01:21:25

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

noales

Здравствуйте!
Очень нужен добрый совет по поводу создания горячих, ну или характерных, точек.
Сколько не вчитываюсь в gayka1, ничего не получается.
Правильно я понимаю, что первый этап - вызов callback-функции LibObjInterfaceEntry? Как, черт возьми, просто заставить её вызываться?

PS

Эта функция не вызывается из библиотеки, она вызывается из Компаса, когда выделяется созданный Вами макроэлемент. Вы должны в ней реализовать обработку Вашего макро. Смотрите Справку по API по функции LibObjInterfaceEntry и интерфейсу ILibHPObject.

noales

Спасибо!
Но это я как раз-таки понимаю )
Колбэки для фантомов у меня работают.
Что я делаю:


exports
  LibObjInterfaceEntry name 'LibObjInterfaceEntry';

...

procedure LibObjInterfaceEntry(idType: integer; comm: integer; var _object : PILibHPObject); stdcall;
begin
  Kompas := KompasObject(CreateKompasObject);
  Kompas.ksMessage('Some text');
end;

...

  MacroParams.fileName := 'HPTry.rtw';
  MacroParams.libName := 'Library';
  MacroParams.number := 10;
  Doc.ksSetMacroParam(ref, MacroParams, False, True, False);


Что я делаю не так?

PS

Функция LibObjInterfaceEntry должна выглядеть (С++) приблизительно так :
void WINAPI LibObjInterfaceEntry( int idType, unsigned int comm, ILibHPObject** object )
{
     if ( object && idType == 1 ) //Hot точки
     {
          GetNewKompasAPI();
          switch ( comm )
          {
   case IDR_LIBID + 1 :
          {
               *object = new HPObjSvHov();
               ( *object )->AddRef();
           }
   }
       }


где HPObjSvHov Ваш класс производный от ILibHPObject в котором нужно реализовать внутренности виртуальных функций ILibHPObject

noales

Спасибо за терпение )
Разобрался, компас молодец, а всё как всегда упирается в идиотские ошибки)

Дмитрий22

Добрый вечер!
Пытаюсь тоже самое реализовать на C#
Класс ILibHPObject компилятор не видит. Не подскажете, где он сидит? Какую ссылку добавить в начало проекта?


Дмитрий22

Да, я знаю, в С++  это - "libhppar.h",

а вот где он описан для языка C#?

В Delphi это пример Gayka, в C# смотрел данный пример, но он проще.

Дмитрий22

Сдается мне он проще потому что функцию LibObjInterfaceEntr  нужно принудительно вызывать из dll, а это неуправляемый код,  который C# не очень любит. Поэтому и пример урезанный. Видимо, добраться до класса ILibHPObject на C# не так просто.....

Описание интерфейсов в файле libhppar.pas, сама реализация класса gayka1.pas, на сколько я понимаю, Вам это нужно перевести на C#.

Дмитрий22

C# не будет работать с файлом libhppar.pas, либо я чего-то не понимаю.

PS

Для C# API Компаса не поддерживает работу с горячими точками.
+ Благодарностей: 2