Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 091

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты. Столкунулся с такой проблемой. В общих чертах: у меня есть одна процедура:
procedure Tform1.send(var web,caption,section,blok:string);
begin
{мой код}
end;
в неё передаются параметры при нажатии кнопки, процедура выполняет всё, что должна, но хотел бы у Вас уточнить - хотел выдернуть эту процедуру в DLL и столкнулся с такой проблемой - DLL отказывается работать с моей формой, хотя в uses я её прописал и даже на код вида "Form1.Caption:='DLL работает' она не ругается, но выполнять его не хочет! подскажите пожалуйста, как взаимодействовать с уже созданной формой из DLL

CodeR Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: CodeR (статус: Посетитель)
Вопрос отправлен: 16 ноября 2008, 16:03
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 7; последнее сообщение — 17 ноября 2008, 18:32; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 16 ноября 2008, 17:45 [#1]:

Лучше формы в длл не хранить. В целом можно, но надо правильно всё инициализировать, а это уже грязный хак. С другой стороны, а зачем выносить этот код в длл? просто что бы похвалиться перед друзьями?
Или хочеться управлять с длл формой, которая находиться в основном приложении?
Галочка "подтверждения прочтения" - вселенское зло.
CodeR

CodeR (статус: Посетитель), 16 ноября 2008, 17:53 [#2]:

Необходимо для собственного развития, а так хочу посмотреть на количество ОП, выделяемой под приложение с DLL и без неё. Есть приложение "Project1.exe" и есть dll "Project2.dll", вот хотелось бы узнать как из Project2.dll управлять формой (Form1) в приложении Project1.exe?
Вадим К

Вадим К (статус: Академик), 16 ноября 2008, 18:09 [#3]:

Памяти точно больше будет. А управлять - через сообщения. то есть, идея такая. В длл передается хендл нужной формы. И процедура в длл передаёт с помощью сообщений SendMessage|PostMessage "указания".
Только не надо например для того, выставить текст на форме, искать какое это будет сообщение, и как его передать. Если так делать, то теряется всё идея длл как библиотеки кода. Форму можно "научить" реагировать на пользовательские события. И если прийдётся использовать эту длл с другой программой, то её "прикручивание" будет очень простым.

А если хочеться просто длл пописать, то лучше попробовать писать плагины для какого нибудь проекта.
Галочка "подтверждения прочтения" - вселенское зло.
CodeR

CodeR (статус: Посетитель), 16 ноября 2008, 18:16 [#4]:

Спасибо, попробую )))
Feniks

Feniks (статус: Бакалавр), 17 ноября 2008, 13:21 [#5]:

А если надумаете передавать в DLL строки в переменных, то это должно быть только PChar, а не String.
Вадим К

Вадим К (статус: Академик), 17 ноября 2008, 13:53 [#6]:

А почему только PChar? WideString чудно передаются и проблем с ними - разве что конвертнуть иногда надо.
Почему с ними нормально? да всё просто. просто эти строки управляются не делфовским менеджером памяти (который у приложения и длл, если не постараться, разный), а виндосовский. А ему побоку, кто строку создал, кто освободил - всё равно один процесс.
В случае с string используется делфовский менеджер памяти (который есть посредником к виндосовскому) и у приложения и у длл он свой, персональный. Теперь, когда мы строку передаем, то на фоне происходят на самом деле хитрые перераспределения памяти и когда один менеджер памяти лезет в хозяйство другого - происходят известные всем глюки.
Галочка "подтверждения прочтения" - вселенское зло.
CodeR

CodeR (статус: Посетитель), 17 ноября 2008, 18:32 [#7]:

Написал сегодня свою первую, весомую DLL ))) решил разделить обязательства между DLL и программой. EXE управляет формой, а DLL выполняет и передаёт нужные программе значения, на основе которых форма ведёт себя так или иначе ))) Спасибо за ответы )) Будут проблемы - обращусь )))

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:32
Выполнено за 0.02 сек.