Dimoniusis
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору lol01 1) из плагина можно вернуть время Download Ticket 2) О плагине пишут кто сделал плаг и версия + запись в лог того же самого. Опции плагина - зависит от тебя и сайта... где-то нужны, где-то нет. 3) ну плаг на сайте самый простой. Если этого хватает - то ничего и не надо. В основном АПИ просто добавлялся. Цитата: Что нужно сделать чтобы УСД "видел"контейнеры | прислать мне описание формата контейнеров ifLaMaster Warningи о Safe Metod можно отключить (вообще в Delphi 7 можно отключить Project -> Options -> Compiler Messages -> самый низ: Unsafe Type, Unsafe code, Unsafe typecast), в данном случае они не нужны. Собака это не кусок имени переменной, а оператор. Вот мы объявляем тип. Строка значит, что переменная типа TShowMsg - это функция, с нужными нам параметрами и с нужным порядком передачи параметров (stdcall): type TShowMsg = function (const AText: PChar; const mode: Byte): Integer; stdcall; Далее, мы определеяем ПЕРЕМЕННУЮ, нашего объявленного типа: ShowMsg: TShowMsg; То есть ShowMsg у нас функция, которая принимает параметры AText и mode. Вопрос только в том, что она пока никуда не ссылается - тела функции нет. И если мы попробуем вызвать ShowMsg('aaa', 1); то выпадем с ошибкой AccessViolation. Теперь мы указываем, где находится в памяти тело этой функции. Реализована функция в коде USDownloader'а, и находится оно в его же области памяти (dll'ка грузится в той же области памяти), так что нам надо просто ссылку на начало этой функции. Ссылку (Pointer) возвращает функция GetFuncAddr, ссылку на которую передает сам USD в функции вызова PlgGetLink. @ShowMsg:=GetFuncAddr('ShowMsg'); То есть эта строка говорит, что функция на самом деле находится в ячейке NNNNNN оперативной памяти. Естественно, что компилятор предупреждает, что этот код не безопасен, ибо на момент компиляции тела функции ShowMsg в памяти еще не существует, и компилятор чисто физически не может проверить правильно будет ссылаться функция или нет. Но этот код уже весь отлажен, а если ты забудешь что-то проинициализировать - то в USD просто в логе появится строка "Ошибка в модуле XXXXX.plg", если бы не было обработчика ошибок, то USD просто упал бы в AccessViolation (потому что плагин работает в контексте USD и если будет ошибка в нем, то винда автоматически прибьет весь родительский процесс). По поводу "ругается, что нет USDownloader.exe" - так ты не компилишь, а ЗАПУСКАЕШЬ. Компиляция Ctrl+F9 просто сделает файл xxxxx.plg в папке, с проектом плагина. А когда ты по F9 пытаешься запустить - плагин то это библиотека, и сам по себе запущен быть не может. В итоге дельфи пытается найти хост приложение (в Delphi Run -> Parameters), которое загрузит и будет использовать эту dll'ку чтобы ее можно было отладить. А по пути у тебя USD нет. Да и если бы был, сурсы плагина врятли находятся у тебя в папке USDownloader\Plugins - а только там эту конструкцию можно будет отладить. | Всего записей: 4134 | Зарегистр. 18-10-2005 | Отправлено: 23:55 09-05-2009 | Исправлено: Dimoniusis, 00:07 10-05-2009 |
|