Технология создания плагинов и программ-дополнений

Здесь обсуждаются графические оболочки, боты, языковые файлы и другие дополнения к CommFort 4.
Аватара пользователя
supermet
Сообщения: 245
Зарегистрирован: 02:35, 19.07.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение supermet »

1) Убедитесь, что Вы верно заполняете структуру информации о плагине, в особенности строку strPluginVersion (версия программы, для которой предназначен плагин).
2) Убедитесь, что Вы используете соглашение __stdcall.
3) Убедитесь, что отключено декорирование имен функций.
4) Убедитесь, что код функции PluginInit не содержит ошибок. Для проверки лучше ограничить содержимое этой функции лишь самым необходимым (заполнением структуры информации о плагине и сохранением идентификатора и адресов функций программы).
Да, все эти условия выполняются. Но положительного результата нет. К сожалению, нет возможности посмотреть работу плагина под отладчиком. Придется по прежнему плагины писать на дельфях и билдере.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Технология создания плагинов и программ-дополнений

Сообщение Maxim Mirgorodsky »

Если при попытке запуска не выводится сообщение о том что произошла ошибка при запуске, то функция запуска просто не находится программой, что может являться следствием одной из двух проблем:
2) Убедитесь, что Вы используете соглашение __stdcall.
3) Убедитесь, что отключено декорирование имен функций.
Проверьте внимательно правильность экспортирования функций. Правильность указания типов параметров функций. Правильность заполнения структур в функции PluginInit.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Технология создания плагинов и программ-дополнений

Сообщение Maxim Mirgorodsky »

DIGGER писал(а):
Maxim Mirgorodsky писал(а):То есть у части пользователей подсвечиваются эти кнопки, а у части не подсвечиваются?
Совершенно верно! Это я Вам и пытался пояснить! Вот тут я нашёл способ выяснить что ошибка в плагине (дальше люди отписывались)

Сейчас проблему решил изменив опции компиляции, но это не выход! (как по мне)
DIGGER писал(а):Обновил плагин: изменил опции компиляции (Может теперь заработает у всех?)
Какие именно опции компиляции изменены? И почему это не выход :)?

Кнопки Options и About не подсвечиваются только если программа не находит соответствующие функции в плагине.
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение DIGGER »

Не выход (как по мне) потому что у одних ВСЁ находит, а у других не находит, и установить зависимость мне не удалось: нестабильность отпугивает! Кто знает что ещё не так?

Убрал опции при компилировании:

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

/ALIGN:32
/STUB:xxxx
Аватара пользователя
supermet
Сообщения: 245
Зарегистрирован: 02:35, 19.07.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение supermet »

Спасибо! Все получилось с помощью опции линкера -Wl,--kill-at убрал символы @n. Борланд и GCC по разному декорируют функции __stdcall и __cdecl. Я экспортровал функции с __cdecl, т.к. в этом случае имя не искажалось, но при __cdecl функция не чистит стек, поэтому была ошибка.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Технология создания плагинов и программ-дополнений

Сообщение Maxim Mirgorodsky »

DIGGER писал(а):Не выход (как по мне) потому что у одних ВСЁ находит, а у других не находит, и установить зависимость мне не удалось: нестабильность отпугивает! Кто знает что ещё не так?

Убрал опции при компилировании:

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

/ALIGN:32
/STUB:xxxx
Что именно меняют эти опции? И почему при их отсутствии у всех работает корректно?
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение DIGGER »

Стуб меняет досовский заголовок файла (тот что запускается когда ОС ДОС)
А алигн меняет минимальный размер секций (по умолчанию 512, если не ошибаюсь)

P.S. Сорри за сленг. спешу.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Технология создания плагинов и программ-дополнений

Сообщение Maxim Mirgorodsky »

DIGGER писал(а):Стуб меняет досовский заголовок файла (тот что запускается когда ОС ДОС)
А алигн меняет минимальный размер секций (по умолчанию 512, если не ошибаюсь)

P.S. Сорри за сленг. спешу.
Непонятно по этому описанию, чем именно вредны данные изменения в опциях компиляции? Возможно, ошибка и была в компиляторе, ведь с данными опциями у всех все функции находятся корректно?
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение DIGGER »

Maxim Mirgorodsky писал(а):Непонятно по этому описанию, чем именно вредны данные изменения в опциях компиляции?
Так в том-то и дело что ничем НЕ вредны! Нарушений спецификаций не происходит, просто обычно это не используется.
Maxim Mirgorodsky писал(а):Возможно, ошибка и была в компиляторе, ведь с данными опциями у всех все функции находятся корректно?
Вообще-то это дело линковщика, а не компилятора. Использую пакет MASM 9.1. не думаю что в ТАКОМ пакете есть ТАКИЕ ошибки.
Данные опции практически НИКТО не использует! Вот потому и не понятно как так что чат на одной системе находит всё, а на другой нет. В частности это касается 64битных систем. Каким методом Вы получаете список экспортируемых функций? (Если не секрет, конечно)
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Технология создания плагинов и программ-дополнений

Сообщение Maxim Mirgorodsky »

не думаю что в ТАКОМ пакете есть ТАКИЕ ошибки.
Проблемы и ошибки встречаются в любом ПО и нередко легкоповторяемые в очень крупных проектах. Например, в Windows Vista без SP1 лично статкивался с очень масштабной ошибкой, повторить которую было просто, последствия были серьезными, однако ее исправили лишь в первом пакете обновлений. Еще можно привести в пример CodeGear RAD Studio 2009 (на котором и пишутся текущие версии CommFort): достоверно известен ряд очевидных неисправленных ошибок, по которым отправлялась информация еще несколько лет назад, но они до сих пор не исправлены. Заканчиваю с офтопиком.
Каким методом Вы получаете список экспортируемых функций?
Пути импорта и поиска функций разумеется стандартные (GetProcAddress).

Для обнаружения точной причины необходимы детальные наблюдения, для этого необходимо подключить тех пользователей, у которых проблемы. Но я не вижу в этом смысла, так как настройка компилятора решила проблему. Можно попробовать получить детальную информацию по тем опциям, которые избавляют от проблемы, эта информация может дать ответ о причинах.
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение DIGGER »

Использую:

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

Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
Будет интересно если в этом пакете такая странная ошибка… (12 лет как никак)
Выпущу новую версию плагина и постараюсь более подробно поспрашивать людей что у них за Windows такие.

Maxim Mirgorodsky, к Вам можно обращаться в будущем с этим же вопросом? (Если появятся новая информация которая может помочь)
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Технология создания плагинов и программ-дополнений

Сообщение Maxim Mirgorodsky »

Конечно, информация о причинах тех или иных проблем всегда очень полезна, обращайтесь. Но я так понимаю что на данный момент сама проблема уже не актуальна по причине ее устранения путем настройки компилятора.
Аватара пользователя
VIRUS
Сообщения: 174
Зарегистрирован: 13:15, 23.11.2008

Re: Технология создания плагинов и программ-дополнений

Сообщение VIRUS »

Цитата:
Конечно возможно, я например в плагине "Каркас" таймер использовал. Нужно создать объект класса TTimer и рабоать с ним.

Дельфийский и Билдеровский таймер не работает без формы.
За Делфи не скажу точно. Может без формы таймер и не работает, но в Билдере работает замечательно без формы.
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
Аватара пользователя
supermet
Сообщения: 245
Зарегистрирован: 02:35, 19.07.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение supermet »

За Делфи не скажу точно. Может без формы таймер и не работает, но в Билдере работает замечательно без формы.
Но не все пишут в Билдере. Например, на Visual C++ такого формошлепства и таймера нет. Поэтому использую WinApi. Создаю отдельный поток через CreateThread и в его функции пишу нужный код.
Жалко что плагины не напишешь на Java, там все намного легче, есть крутые IDE с рефакторингом и т.п.
Последний раз редактировалось supermet 22:38, 14.08.2009, всего редактировалось 1 раз.
Аватара пользователя
Modesty
Сообщения: 58
Зарегистрирован: 20:26, 05.05.2008
Откуда: Томск

Re: Технология создания плагинов и программ-дополнений

Сообщение Modesty »

Все что работает с формой, замечательно работает и без формы и даже лучше. Консоль в данном случае отруливает.
Закрыто