tag:blogger.com,1999:blog-1702873441071265539.post8286293718238749915..comments2023-05-29T19:02:20.570+03:00Comments on Блог GunSmoker-а: Разработка системы плагинов, часть 8: расширение системы и обратная совместимостьGunSmokerhttp://www.blogger.com/profile/15611696588191431330noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-1702873441071265539.post-86928419320056648272012-10-05T22:22:00.012+04:002012-10-05T22:22:00.012+04:00Здравствуйте, Алексей.
После прочтения вашей сери...Здравствуйте, Алексей.<br /><br />После прочтения вашей серии статей "Разработка системы плагинов", решил испробовать исходники. Но столкнулся со сложностями. В частности, с выгрузкой плагинов. Как правильно производить выгрузку плагинов?<br /><br />Ссылка на мой вариант исходников (delphi 2010): https://www.dropbox.com/s/nt2slcko465btft/PluginAPI_11%282%29.zip<br />Зеркало: http://depositfiles.com/files/nu61px1jr<br /><br />1. После выгрузки плагина через контекстное меню "Unload plugin", файл плагина невозможно удалить.<br /><br />2. После выгрузки всех плагинов с помощью кнопки "Unload all plugins", не получается загрузить плагины используя кнопку "Load all plugins". Появляется Access violation:<br /><br />http://s42.radikal.ru/i097/1210/39/5db5d20001b8.jpg<br /><br />Пытался разными способами исправить, но всё безрезультатно.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-91917483546194389882012-08-21T20:09:40.873+04:002012-08-21T20:09:40.873+04:00По умолчанию в DLL нет никого, кто обрабатывал бы ...По умолчанию в DLL нет никого, кто обрабатывал бы Synchronize. Поэтому для начала его нужно настроить. Я планировал сделать обзор многопоточности в плагинах в следующих частях серии статей.<br /><br />Как простой вариант - синхронизацию может делать не плагин, а ядро (реализация SendData).GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-61250937699890684512012-08-21T19:54:57.982+04:002012-08-21T19:54:57.982+04:00Александр здравствуйте!
Внимательно прочитал вашу...Александр здравствуйте!<br /><br />Внимательно прочитал вашу подборку статей о разработке системы плагинов. Большое вам спасибо за проделанную вами работу. Однако у меня возникли сложности с реализацией моей системы плагинов.<br /><br />Задача стоит такая: плагин управляет внешним устройством, отправляет, получаемые данные в основную программу. Из программы имеется доступ к элементам управления настройками приборов. Это все реализовалось без особых проблем.<br />Считывание данных для ряда случаев должно происходить непрерывно. В dll я создаю поток, который получает данные с прибора и отправляет их в основную программу.<br /><br />Основная программы передает плагину интерфейс типа:<br /> IReceiverData = interface<br /> ['{F9BB2FF2-6099-4F12-B1AD-682C1B270284}']<br /> procedure SendData(AData:WideString); safecall;<br /> end;<br /><br />Если в потоке я вызываю этот интерфейс следующим образом:<br /> <br />procedure TDeviceThread.SendData;<br />begin<br /> FReceiver.SendData(FSendData);<br />end;<br /><br />procedure TDeviceThread.Execute;<br />...<br />Synchronize(SendData)<br />...<br />end;<br /><br />То в этом случае данные не отправляются в программу.<br />Если я не испльзую синхронизацию, то рано или поздно вылетает ошибка. <br />Посоветуйте пожалуйста как можно реализовать такой поток в dll.РоманО.noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-32344161818955426082012-08-02T14:02:02.553+04:002012-08-02T14:02:02.553+04:00Хочу заметить, что в виртуальной машине Мас аппара...Хочу заметить, что в виртуальной машине Мас аппаратное ускорение графики не работает. И также оно не работает на реальном Мас, если к нему не подключен монитор. Странно, правда? )Kromhttps://www.blogger.com/profile/14769975185177291821noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-2514356301802035912012-08-02T13:56:29.421+04:002012-08-02T13:56:29.421+04:00Эээ... это как бы личный блог. Т.е. пишу я про то,...Эээ... это как бы личный блог. Т.е. пишу я про то, что мне лично интересно. <br /><br />Виртуальную машину использовать можно. А в чём интерес писать что-то под несуществующее (для тебя) устройство?GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-24848302142445857862012-08-01T20:25:30.209+04:002012-08-01T20:25:30.209+04:00>Но я не могу про это писать - у меня нет Apple...>Но я не могу про это писать - у меня нет Apple-устройств. <br /><br />А виртуальной машине не доверяете?<br />http://www.youtube.com/watch?v=n7nMtJMdEyw&feature=player_embeddedAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-67982112949027841062012-07-31T12:35:04.837+04:002012-07-31T12:35:04.837+04:00Этот вопрос уже задавали.
Судя по этому - должно ...Этот вопрос уже задавали.<br /><br />Судя по <a href="http://en.wikipedia.org/wiki/IUnknown" rel="nofollow">этому</a> - должно работать без проблем: <i>IUnknown serves as the base for Mac OS X's Core Foundation CFPlugIn framework</i>.<br /><br />Но я не могу про это писать - у меня нет Apple-устройств.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-18983785710005622332012-07-31T06:33:29.877+04:002012-07-31T06:33:29.877+04:00Увидел в серии статей пример плагина с использован...Увидел в серии статей пример плагина с использованием FMX и сразу назрел вопрос. А в Os X такие dll будут работать? Если будут, то и пример ядра с использованием FireMonkey не помешал бы.....Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-6432892952204801262012-07-29T22:42:43.025+04:002012-07-29T22:42:43.025+04:00Ну, это вполне нормальное решение в библиотеках, и...Ну, это вполне нормальное решение в библиотеках, используемых в одном исполняемом модуле. Потому что исходный код полностью перекомпилируется, так что всегда будет использоваться максимальо актуальная версия, и конфликтов не будет.<br /><br />Но в схеме с плагинами это будет означать, что мы не используем минимально возможный вариант. Т.е. плагин, собранный для v2, в v1 работать не будет.GunSmokerhttps://www.blogger.com/profile/15611696588191431330noreply@blogger.comtag:blogger.com,1999:blog-1702873441071265539.post-71445790133641557612012-07-29T22:38:38.800+04:002012-07-29T22:38:38.800+04:00> "динамический" тип, который всегда ...> "динамический" тип, который всегда будет указывать на самую последнюю версию интерфейса<br /><br />Вот. Я такое встречал пару раз (в сторонних библиотеках), и всё никак не мог понять, что же мне в этом не нравится. Вроде и нормально, но подсознательно - что-то не так. Теперь всё понятно, спасибо.Николай Зверевhttps://www.blogger.com/profile/08965247674233981930noreply@blogger.com