Да, все эти условия выполняются. Но положительного результата нет. К сожалению, нет возможности посмотреть работу плагина под отладчиком. Придется по прежнему плагины писать на дельфях и билдере.1) Убедитесь, что Вы верно заполняете структуру информации о плагине, в особенности строку strPluginVersion (версия программы, для которой предназначен плагин).
2) Убедитесь, что Вы используете соглашение __stdcall.
3) Убедитесь, что отключено декорирование имен функций.
4) Убедитесь, что код функции PluginInit не содержит ошибок. Для проверки лучше ограничить содержимое этой функции лишь самым необходимым (заполнением структуры информации о плагине и сохранением идентификатора и адресов функций программы).
Технология создания плагинов и программ-дополнений
Re: Технология создания плагинов и программ-дополнений
-
- Администратор
- Сообщения: 6869
- Зарегистрирован: 09:56, 27.06.2005
Re: Технология создания плагинов и программ-дополнений
Если при попытке запуска не выводится сообщение о том что произошла ошибка при запуске, то функция запуска просто не находится программой, что может являться следствием одной из двух проблем:
Проверьте внимательно правильность экспортирования функций. Правильность указания типов параметров функций. Правильность заполнения структур в функции PluginInit.2) Убедитесь, что Вы используете соглашение __stdcall.
3) Убедитесь, что отключено декорирование имен функций.
-
- Администратор
- Сообщения: 6869
- Зарегистрирован: 09:56, 27.06.2005
Re: Технология создания плагинов и программ-дополнений
DIGGER писал(а):Совершенно верно! Это я Вам и пытался пояснить! Вот тут я нашёл способ выяснить что ошибка в плагине (дальше люди отписывались)Maxim Mirgorodsky писал(а):То есть у части пользователей подсвечиваются эти кнопки, а у части не подсвечиваются?
Сейчас проблему решил изменив опции компиляции, но это не выход! (как по мне)
Какие именно опции компиляции изменены? И почему это не выход ?DIGGER писал(а):Обновил плагин: изменил опции компиляции (Может теперь заработает у всех?)
Кнопки Options и About не подсвечиваются только если программа не находит соответствующие функции в плагине.
Re: Технология создания плагинов и программ-дополнений
Не выход (как по мне) потому что у одних ВСЁ находит, а у других не находит, и установить зависимость мне не удалось: нестабильность отпугивает! Кто знает что ещё не так?
Убрал опции при компилировании:
Убрал опции при компилировании:
Код: Выделить всё
/ALIGN:32
/STUB:xxxx
Re: Технология создания плагинов и программ-дополнений
Спасибо! Все получилось с помощью опции линкера -Wl,--kill-at убрал символы @n. Борланд и GCC по разному декорируют функции __stdcall и __cdecl. Я экспортровал функции с __cdecl, т.к. в этом случае имя не искажалось, но при __cdecl функция не чистит стек, поэтому была ошибка.
-
- Администратор
- Сообщения: 6869
- Зарегистрирован: 09:56, 27.06.2005
Re: Технология создания плагинов и программ-дополнений
Что именно меняют эти опции? И почему при их отсутствии у всех работает корректно?DIGGER писал(а):Не выход (как по мне) потому что у одних ВСЁ находит, а у других не находит, и установить зависимость мне не удалось: нестабильность отпугивает! Кто знает что ещё не так?
Убрал опции при компилировании:Код: Выделить всё
/ALIGN:32 /STUB:xxxx
Re: Технология создания плагинов и программ-дополнений
Стуб меняет досовский заголовок файла (тот что запускается когда ОС ДОС)
А алигн меняет минимальный размер секций (по умолчанию 512, если не ошибаюсь)
P.S. Сорри за сленг. спешу.
А алигн меняет минимальный размер секций (по умолчанию 512, если не ошибаюсь)
P.S. Сорри за сленг. спешу.
-
- Администратор
- Сообщения: 6869
- Зарегистрирован: 09:56, 27.06.2005
Re: Технология создания плагинов и программ-дополнений
Непонятно по этому описанию, чем именно вредны данные изменения в опциях компиляции? Возможно, ошибка и была в компиляторе, ведь с данными опциями у всех все функции находятся корректно?DIGGER писал(а):Стуб меняет досовский заголовок файла (тот что запускается когда ОС ДОС)
А алигн меняет минимальный размер секций (по умолчанию 512, если не ошибаюсь)
P.S. Сорри за сленг. спешу.
Re: Технология создания плагинов и программ-дополнений
Так в том-то и дело что ничем НЕ вредны! Нарушений спецификаций не происходит, просто обычно это не используется.Maxim Mirgorodsky писал(а):Непонятно по этому описанию, чем именно вредны данные изменения в опциях компиляции?
Вообще-то это дело линковщика, а не компилятора. Использую пакет MASM 9.1. не думаю что в ТАКОМ пакете есть ТАКИЕ ошибки.Maxim Mirgorodsky писал(а):Возможно, ошибка и была в компиляторе, ведь с данными опциями у всех все функции находятся корректно?
Данные опции практически НИКТО не использует! Вот потому и не понятно как так что чат на одной системе находит всё, а на другой нет. В частности это касается 64битных систем. Каким методом Вы получаете список экспортируемых функций? (Если не секрет, конечно)
-
- Администратор
- Сообщения: 6869
- Зарегистрирован: 09:56, 27.06.2005
Re: Технология создания плагинов и программ-дополнений
Проблемы и ошибки встречаются в любом ПО и нередко легкоповторяемые в очень крупных проектах. Например, в Windows Vista без SP1 лично статкивался с очень масштабной ошибкой, повторить которую было просто, последствия были серьезными, однако ее исправили лишь в первом пакете обновлений. Еще можно привести в пример CodeGear RAD Studio 2009 (на котором и пишутся текущие версии CommFort): достоверно известен ряд очевидных неисправленных ошибок, по которым отправлялась информация еще несколько лет назад, но они до сих пор не исправлены. Заканчиваю с офтопиком.не думаю что в ТАКОМ пакете есть ТАКИЕ ошибки.
Пути импорта и поиска функций разумеется стандартные (GetProcAddress).Каким методом Вы получаете список экспортируемых функций?
Для обнаружения точной причины необходимы детальные наблюдения, для этого необходимо подключить тех пользователей, у которых проблемы. Но я не вижу в этом смысла, так как настройка компилятора решила проблему. Можно попробовать получить детальную информацию по тем опциям, которые избавляют от проблемы, эта информация может дать ответ о причинах.
Re: Технология создания плагинов и программ-дополнений
Использую:
Будет интересно если в этом пакете такая странная ошибка… (12 лет как никак)
Выпущу новую версию плагина и постараюсь более подробно поспрашивать людей что у них за Windows такие.
Maxim Mirgorodsky, к Вам можно обращаться в будущем с этим же вопросом? (Если появятся новая информация которая может помочь)
Код: Выделить всё
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.
Выпущу новую версию плагина и постараюсь более подробно поспрашивать людей что у них за Windows такие.
Maxim Mirgorodsky, к Вам можно обращаться в будущем с этим же вопросом? (Если появятся новая информация которая может помочь)
-
- Администратор
- Сообщения: 6869
- Зарегистрирован: 09:56, 27.06.2005
Re: Технология создания плагинов и программ-дополнений
Конечно, информация о причинах тех или иных проблем всегда очень полезна, обращайтесь. Но я так понимаю что на данный момент сама проблема уже не актуальна по причине ее устранения путем настройки компилятора.
Re: Технология создания плагинов и программ-дополнений
За Делфи не скажу точно. Может без формы таймер и не работает, но в Билдере работает замечательно без формы.Цитата:
Конечно возможно, я например в плагине "Каркас" таймер использовал. Нужно создать объект класса TTimer и рабоать с ним.
Дельфийский и Билдеровский таймер не работает без формы.
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
Re: Технология создания плагинов и программ-дополнений
Но не все пишут в Билдере. Например, на Visual C++ такого формошлепства и таймера нет. Поэтому использую WinApi. Создаю отдельный поток через CreateThread и в его функции пишу нужный код.За Делфи не скажу точно. Может без формы таймер и не работает, но в Билдере работает замечательно без формы.
Жалко что плагины не напишешь на Java, там все намного легче, есть крутые IDE с рефакторингом и т.п.
Последний раз редактировалось supermet 22:38, 14.08.2009, всего редактировалось 1 раз.
Re: Технология создания плагинов и программ-дополнений
Все что работает с формой, замечательно работает и без формы и даже лучше. Консоль в данном случае отруливает.