![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Bismuth |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 5.1.2007 Репутация: нет Всего: нет |
Люди, помогите, пожалуйста!!!
Я вот какую прогу пытаюсь сделать сделать: Пользователь вводит что-нибудь в RichEdit1 (в принципе, это может быть и объект типа TEdit, TMemo... Но я пишу так, как у меня сделано). Затем, при нажатии определенной кнопочки, загружается моя же DLL'ка (динамическим способом). Если загрузка успешна, то из DLL'ки вызывается процедура QWERTY. Вот полное описание этой процедуры: procedure qwerty; begin ShowMessage(Unit1.Form1.RichEdit1.Text); end; В принципе, ничего необычного: Эта процедура показывает сообщение с текстом из RichEdit1. Тестирую прогу. Нажимаю кнопочку, которая загружает DLL и вызывает qwerty. На экране появляется долгожданное сообщение, но... совершенно пустое, без текста из RichEdit1. В общем, если все вкратце описать, то получается, что моя прога ВИДИТ DLL'ку и В СОСТОЯНИИ вызвать оттуда процедуру qwerty. А DLL'ка НЕ ХОЧЕТ читать переменную RichEdit1.Text. Вот такая проблема. Хочу подчеркнуть, что DLL не читает не только строковые типы, но и все остальные - boolean, integer... Когда я вызываю qwerty (только вместо стринга пытаюсь показать сообщение с integer'ом) сообщение показывает нолик, независимо от настоящего значения переменной типа integer. То есть, видимо, вызываются те значения переменных, которые установлены по-умолчанию. Тут на форуме один чувак другому посоветовал на СИ ДЛЛ'ку написать. А вот в DELPHI можно? Помогите, пожалуйста! Ни на каком форуме мне нормально помочь не могут! Осталась надежда на вас!!! |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
ну все верно. только почему AV не словил?
в том "юните" вокмпиленном в длл нет созданной Form1. нельзя так делать из длл Это сообщение отредактировал(а) MetalFan - 5.1.2007, 20:13 -------------------- There are always someone smarter than you... |
|||
|
||||
| aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Все просто. DLL не знакома с Form1, т.к. это DLL (простите за тафталогию
Тебе надо передавать данные из формы в формы в DLL. -------------------- ![]() |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
знакома то она знакома (никто в uses не мешает Unit1, в кот.Form1 "лежит", прописать) но работать это будет не так, как автор думает) -------------------- There are always someone smarter than you... |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Прямое обращение к свойствам и методам класса из DLL запрещено, поскольку такой механизм не реализован. Реализован, только механизм вызова функций (не методов), кроме того для передачи строк типа AnsiString, String, WideString, необходимо в проекты программы и длл первым модулем записать FastShareMem, который объединяет менеджеры куч длл и программы, без этого все будет работать с ошибками. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| ivan219 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Да можно и PChar использовать если длинна слова не превысит 255 символов тогда не надо FastShareMem.
А так делай следующие а EXE файле создай Функцию:=RichEdit1.Text; В DLL вызывай эту функцию из EXE ShowMessage(Функция);
Писал здесь могут быть ошибки. Это сообщение отредактировал(а) ivan219 - 5.1.2007, 21:59 |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
А еще можно это написать на ассемблере, чтоб быстрее было -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 6 Всего: 121 |
CreateEvent & OpenEvent & WaitForSingleObject
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
А можно по подробнее что это такое |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
-------------------- There are always someone smarter than you... |
|||
|
||||
| Bismuth |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 5.1.2007 Репутация: нет Всего: нет |
ivan219, да, я еще учусь. И не только в DELPHI, но еще и в школе... :-)
Мне 14, но у меня огромные планы :-) aktuba, а подобные вопросы я задавал на других форумах, мне толком никто ничего объяснить не смог. Поэтому я и написал ТАКОЙ вопрос. А вообще - СПАСИБО ВСЕМ!!! ВЫ МНЕ ДЕЙСТВИТЕЛЬНО ПОМОГЛИ, И Я ЦЕНЮ ВАШУ ПОМОЩЬ!!! |
|||
|
||||
| former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 5 Всего: 17 |
Помните про ShareMem, если работаете с длинными строками.
-------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
former, ShareMem имеет одно неудобство - требует таскания за собой библиотеки с менеджером памяти. FastShareMem крошечная, работает быстрее и не требует дополнительных библиотек.
Это однозначно лучше. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |