Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переменные в DLL 
:(
    Опции темы
Bismuth
Дата 5.1.2007, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 можно?

Помогите, пожалуйста! Ни на каком форуме мне нормально помочь не могут! Осталась надежда на вас!!!
PM MAIL   Вверх
MetalFan
Дата 5.1.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



ну все верно. только почему AV не словил?
в том "юните" вокмпиленном в длл нет созданной Form1.
нельзя так делать из длл

Это сообщение отредактировал(а) MetalFan - 5.1.2007, 20:13


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
aktuba
Дата 5.1.2007, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Все просто. DLL не знакома с Form1, т.к. это DLL (простите за тафталогию  smile )
Тебе надо передавать данные из формы в формы в DLL.


--------------------
user posted image
PM MAIL WWW Skype   Вверх
MetalFan
Дата 5.1.2007, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(aktuba @  5.1.2007,  20:29 Найти цитируемый пост)
DLL не знакома с Form1

знакома то она знакома (никто в uses не мешает Unit1, в кот.Form1 "лежит", прописать)
но работать это будет не так, как автор думает)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Alexeis
Дата 5.1.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Bismuth @  5.1.2007,  20:06 Найти цитируемый пост)
А DLL'ка НЕ ХОЧЕТ читать переменную RichEdit1.Text. Вот такая проблема.

  Прямое обращение к свойствам и методам класса из DLL запрещено, поскольку такой механизм не реализован. Реализован, только механизм вызова функций (не методов), кроме того для передачи строк типа AnsiString, String, WideString, необходимо в проекты программы и длл первым модулем записать FastShareMem, который объединяет менеджеры куч длл и программы, без этого все будет работать с ошибками.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ivan219
Дата 5.1.2007, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Да можно и PChar использовать если длинна слова не превысит 255 символов тогда не надо FastShareMem.

А так делай следующие а EXE файле создай Функцию:=RichEdit1.Text;
В DLL вызывай эту функцию из EXE ShowMessage(Функция);

Код

//EXE-фаил
.
.
function RichEditText: PChar; StdCall;
begin
 Result:=Form1.RichEdit1.Text;
end;
.
.
exports
 RichEditText;
end.


Код

// Dll-фаил
function RichEditText:PChar; StdCall;
 External '*.exe' Name 'RichEditText';

procedure qwerty;
begin
  ShowMessage(RichEditText);
end;


Писал здесь могут быть ошибки.



Это сообщение отредактировал(а) ivan219 - 5.1.2007, 21:59
PM MAIL ICQ   Вверх
Alexeis
Дата 5.1.2007, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(ivan219 @  5.1.2007,  21:57 Найти цитируемый пост)
Да можно и PChar использовать если длинна слова не превысит 255 символов тогда не надо FastShareMem.

А так делай следующие а EXE файле создай Функцию:=RichEdit1.Text;
В DLL вызывай эту функцию из EXE ShowMessage(Функция);


  А еще можно это написать на ассемблере, чтоб быстрее было  smile , но есть ли смысл. Если писать в делфи, то нужно использовать ее встроенные механизмы, а не механизмы совместимости. Зачем нужна эта возня со слежением за памятью - кто куда передал, где выделил, кода удалить и проч.? Стандартные строки это безопасные указатели, которые сами следят, за областью применимости указателя и очищают его память, когда она точно больше не нужна. Благодаря этому достигается прозрачность кода и естественная красота программирования на делфи. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
W4FhLF
Дата 6.1.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



CreateEvent & OpenEvent & WaitForSingleObject


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
ivan219
Дата 6.1.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Цитата(W4FhLF @  6.1.2007,  12:20 Найти цитируемый пост)
CreateEvent & OpenEvent & WaitForSingleObject

А можно по подробнее что это такое smile 
PM MAIL ICQ   Вверх
MetalFan
Дата 6.1.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(W4FhLF @  6.1.2007,  12:20 Найти цитируемый пост)
CreateEvent & OpenEvent & WaitForSingleObject 

а это к чему вообще?



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Bismuth
Дата 6.1.2007, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



ivan219, да, я еще учусь. И не только в DELPHI, но еще и в школе... :-)
Мне 14, но у меня огромные планы :-)
aktuba, а подобные вопросы я задавал на других форумах, мне толком никто ничего объяснить не смог. Поэтому я и написал ТАКОЙ вопрос.
А вообще - СПАСИБО ВСЕМ!!! ВЫ МНЕ ДЕЙСТВИТЕЛЬНО ПОМОГЛИ, И Я ЦЕНЮ ВАШУ ПОМОЩЬ!!!
PM MAIL   Вверх
former
Дата 7.1.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 5
Всего: 17



Помните про ShareMem, если работаете с длинными строками. smile 


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Alexeis
Дата 7.1.2007, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



former, ShareMem имеет одно неудобство - требует таскания за собой библиотеки с менеджером памяти. FastShareMem крошечная, работает быстрее и не требует дополнительных библиотек. 
Это однозначно лучше.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0667 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.