| Библиотека программирование, программирование, языки программирования, книги программирование | На сайте представлена информация про программирование в Интернете и работу |
|
Печать в "нормальном" размере.., принтер... Покрасить фон CheckBox'а заданной штриховкой?.. Как распечатать форму, если она длинная!!!, на ней скролинг Program Files => PROGRA~1, Преобразование имен файлов и папок Отправка сообщений по сети. С чего начать не видно окно отладки Watch двумерный массив как параметр, передать двумерный динамический м-в Где достать Delphi 7, Delphi7 Ip, как узнать Ip? Поиск файлов у которых в расширении есть слово... Исключение путя файла во время поиска Console App, Переменные Как вычислить размер ресурса содержащего иконки Как можно вытащить иконку, соответствующую типу файла? как из вставить в вордовский документ textbox MS AGENT, работа без Delphi Findfunction ??? Запуск программы с параметрами из другой программы, запуск в режиме совместимости Компоненты для шифрования, Посоветуйте DLL + TADOQuery Считать строку из ListBox Еще вопрос по потокам (TThread )и базам данных, Одновременная работа потоков Проблема с InterBase Чтение реестра под гостем в 2000 Компонент для 3D диаграмм вопрос по TImage, Проблемы с работой в run-time с TImage AutoSize в дочерней форме, fsMDIChild Как из .doc получить картинки?, Как преобразовать текст в картинки? Мигание главного окна, при запуске второй копии приложения Обращение к TAction в DLL Формы в Outlook, Использование Outlook+Exchange Вопрос по потокам (Thread) и базам данных, Взаим-е потоков с компонентом TTable published property типа TWinControl, написание компонентов Как определить требования своей программы, Как определить требования своей программ Некоротые программы использоют интересный шрифт, но я не могу поставить себе такой же :( Как Вы относитесь к курящим девушкам? Где найти компоненты TDBGridEx и TkbmMemTable? Сохранение региона в файл, subj. При создании таблицы runtime хочу определить Langu AlphaControls, проблемы с меню Порядок инициализации и финализации модулей, обработчик OnException FastReport, Отчет с помощью FastReport Масштабирование полигонов..., желательно быстрый компонент... Ошибка при поиске файлов работа ф-ции деления, в цикле Изменить цвет PageControl'a в XP-стиле..., все равно белый... :( Помогите решить задачку плиззз, народ помогите умираю!!! Как выключить\включить монитор в XP? Отображение содержимого поля OLE из БД Paradox Поиск окна Работа с функциями в Delphi ini файл, проблема повторного сохранения Определение нажатия клавиши, Как отловить, какая нажата клавиша? Как определить директорию с программой?, Путь, откуда прога запущена... Опять перехват... Chat, Chat Error: Canvas does not allow drawing., что с этим делать. ОСУБД для Delphi Работа со скриптами, neeed some help http://www.realcoding.net, http://www.realcoding.net Закладка FastNet, Не могу сделать Finger-клиент ImageImportByName Инструмент создания диалогов, есть у кого нибудь? Какое сообщение получает форма, когда становится н Русские символы в английские, как преобразовать? получение текста из html, как получить текст Chat, Очень нужен Функции в отдельный файл FindProperty? Чтение чисел из файла! |
Платные хостинги Раскрутка сайта Книги по программированию Обращение к TAction в DLL
- Суть в следующем:Есть в программе кнопка и я хочу присвоить ей Action, находящийся в динамически подключаемой dll.Создается и присваивается все нормально, но не изменяются некоторые свойства кнопки, которые изменяются, если Action в основном модуле. Например, Caption, Hint... Но все-таки Action отрабатывает при нажатии кнопки.А вот если назначить этот Action пункту меню, то при нажатии (вызов метода Action.Execute) появляется бред в виде Exception - Invalid Typecast.Если кто-нить разбирается во внутренностях VCL, напишите, plz - где ошибка?Заранее благодарен.P.S. И не надо говорить, что ошибка у меня в ДНК . Это я и сам знаю . - Используй Package-и. - Те же яйца, только в профиль, однако. А собственно, BPL- та же DLL (только в профиль )Я еще не сказал, что речь идет об интерфейсе plug-in -ов,т.е. линковать нужно обязательно динамически.Еще идеи есть? - >А собственно, BPL- та же DLLЯ бы не сказал. BPL - очень удобный способ создавать плагины. Сложно будет передать куски интерфейса из dll в твою программу. С пакетами это - проще... - Сложно... проще...А можно поконкретнее что-нибудь, или где почитать, что-то в книгах эти темы не освещаются.В лучшем случае просто говориться - чтобы создать пакет (или dll), делайте так! А нюансов никаких Так почему, когда назначаешь пункту меню основного приложения TAction, который находится в динамически подключаемой библиотеке,происходит Exception - Invalid Typecast при обращении к этому пункту меню?А если назначить этот Action кнопке, то все работает, НО кнопка не реагирует на Action.Enable / Disable ? - Судя по тому, что не отрабатывают свойства с типом string, возникает глупый вопрос - с uses ShareMem все нормально? - Да, конечно с ShareMem все нормально - специально посмотрел в ProcessViewer-e юзается ли эта самая borlndmm.dll.Причем смотрел RTTI объектов TAction созданных в основной форме и в DLL, типа:var ac: TAction; ti: PTypeInfo; td: PTypeData;... ac := Action1; // Action1 или в форме или в dll ti := ac.ClassInfo(); td := getTypeData(ti);При просмотре структуры в отладчике td^.r jбъекты в обоих случаях одинаковые за исключением одной вещи:ClassType: TAction - для Action из формы иClassType: TClass($адрес) для Action из DllВо. - Давно изывестная вещь. Таблицы типов для dll и exe разные. То есть и тот и другой имеют эту таблицу, которую туда вкомпиливает компилятор. Так как делфи определяет тип простым сравнением указателей на таблицы, то объект одного и того же типа для dll и ехе будет иметь разный тип. То есть если ты создал в exe TAction и передал его в dll через параметр action, то проверка в dll: action is TAction вернет false. А приведение с использованием RTTI: (action as TAction).DoSomething(); создаст исключение - плохой typecast. В то время как простой кастинг: TAction(action).DoSomething(); будет работать норамльно. А пакеты как раз тем и отличаются, что они разделяют общую таблицу типов, и потому все в них происходит норамльно. - Т.е. то, что я хочу невозможно в принципе. Ведь если я пункту меню из основной проги назначаю TAction из DLL, то при клике автоматом идет вызов (action as TAction).Я пробовал это дело с run-time packag-ами. Разумеется и основной модуль и BPL, который plug-in.Т.е. вышеупомянутая таблица у них должна быть одна.Факт - exception не возникает, но все равно ничего не работает... - Вот, что получилось.Если передать в DLL форму из основного приложения и там создать Action с этим Owner-ом, то и действительно все работает .А я пытался в DLL создать Action и привязать его к форме в основном приложении, причем был вариант - пересылал в DLL Application и создавал Action с Owner=Application - не работало.Усем бАльшой Тханкс! |