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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Экспорт данных из DLL 
V
    Опции темы
former
  Дата 1.7.2006, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


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

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



В Dll находится форма, которая запускается из основной программы. На этой форме расположен ValueListEditor. При создании формы из библиотеки необходимо передать данные из основной программе (9 переменных типа real). После работы с формой (данными в ValueListEditor), закрывая её по нажатию кнопки, необходимо передать изменённые данные из ValueListEditor в основную программу тем же переменным. 


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


Эксперт
****


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

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



former
Можно приступать?
Что же вы все так и наровите послать какую то фигню форме или в dll-ку. Намного прощее передавать адрес того, что ты хочешь ей передать. Сам посуди: если будешь передавать 9 вещественных (real) чисел, то это займёт 72 B памяти, а если адреса переменных, то в два раза меньше, т.е. 36.   

Это сообщение отредактировал(а) Yanis - 1.7.2006, 22:13


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
former
Дата 1.7.2006, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


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

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



А как это реализовать? smile  smile  smile 

Я делаю следующее:

Процедура создания формы
Код

procedure CreateForm(AppHandle: THandle; p1,p2,p3,p4,p5,p6,p7,p8,p9:real);
begin
    Application.Handle:=AppHandle;
    Form:=TForm.Create(Application);
    Form.ShowModal;
end;


Процедура закрытия формы
Код

procedure DestroyForm;
begin
    Form.Free;
end;


А так пытаюсь передать их обратно
Код

procedure GetPar(p1,p2,p3,p4,p5,p6,p7,p8,p9:real);
begin
  p1:=StrToFloat(TechnolForm.ValueListEditor1.Values[Параметр 1']);
  ................

  p9:=StrToFloat(TechnolForm.ValueListEditor1.Values[Параметр 9']);
end;


В основной программе
Код

  CreateForm(Application.Handle,p1,p2,p3,p4,p5,p6,p7,p8,p9);
  GetPar(p1,p2,p3,p4,p5,p6,p7,p8,p9);
  DestroyForm;
 


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


Эксперт
****


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

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



Во первых параметры функции GetPar должны быть объявлены как var.

Добавлено @ 23:06 
и в CreateForm тоже.  

Это сообщение отредактировал(а) Yanis - 1.7.2006, 23:06


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
former
Дата 2.7.2006, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


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

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



Исправил на:

Код

procedure CreateForm(AppHandle: THandle; var p1,p2,p3,p4,p5,p6,p7,p8,p9:real);

и
Код

procedure GetPar(var p1,p2,p3,p4,p5,p6,p7,p8,p9:real);


но выскакивает сообщение: Project raised exeption class EConvertError with message "is not a vaild floating point value".

По всей видимости проблемы с преобразованием:
Код

p1:=StrToFloat(TechnolForm.ValueListEditor1.Values['Параметр 1']);
 


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


Эксперт
****


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

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



Вобщем пришлось пример накидать. Всем кто не может сказать "Я знаю как передавать параметры из dll и обратно!" советую скачать. Хоть пример и не расчитан на учебное пособие, но думаю, что всем станет ясно как перекидываться чилами между dll и прогой... 

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  testik.zip 3,28 Kb


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
former
Дата 2.7.2006, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


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

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



Yanis, спасибо. Всё отлично работает. smile  


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

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

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

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

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


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

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


 




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


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

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