Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
virtual[ity]
157 / 137 / 64
Регистрация: 05.06.2010
Сообщений: 610
#1

Функция создания диалога в DLL - Delphi

05.10.2016, 10:18. Просмотров 677. Ответов 26

Доброе утро!

В библиотеке пишу функцию
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
function OpenDlg(filterStr: string): string;
  var
    opnDlg: TOpenDialog;
begin
  opnDlg:= TOpenDialog.Create(?); // пробовал nil и application не помогло
  opnDlg.Options:= [ofFileMustExist];
  opnDlg.Filter:= filterStr;
  IF opnDlg.Execute THEN Result:= opnDlg.FileName;
  FreeAndNil(opnDlg);
end;
 
exports
OpenDlg;
В программе DLL загружаю статично.
Delphi
1
2
3
function OpenDlg(filterStr: string): string; external 'MyDLL.dll';
 
Edit1.Text:= OpenDlg('*.txt');
У меня два вопроса:
1. Как с использованием длл создать динамически диалог. Формы подключать?
2. Почему память не очищается после завершения работы с диалогом? Виндовс держит в памяти пути и папки?

Спасибо за помощь!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2016, 10:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Функция создания диалога в DLL (Delphi):

Функция создания объекта и свойство Parent
Добрый день, есть такой код: function createPanel(namePanel: String; parent:...

Функция для создания объектов указанного класса
Всем привет, задача такая, как реализовать не знаю. Имеется - базовый класс...

Функция в dll
Вот код библиотеки library mydll; uses SysUtils, Classes, ...

Функция в dll
Привет. Снова я хочу кое-что у вас спросить. Я сделал функцию которую поместил...

Функция из DLL возвращает 0.
Доброго времени суток! Ребята, в курсовике задание: создать ДЛЛ библиотеку и...

Dll: функция с входными параметрами
Простейший пример: Dll library TestDll; uses SysUtils, Classes; ...

26
northener
пофигист широкого профиля
3252 / 2304 / 628
Регистрация: 15.07.2013
Сообщений: 13,599
07.10.2016, 01:18 #21
Еще раз http://www.cyberforum.ru/delphi-begi...ml#post9613548
0
BOGG ART
576 / 444 / 146
Регистрация: 09.12.2013
Сообщений: 2,384
Записей в блоге: 2
07.10.2016, 14:09 #22
Цитата Сообщение от virtual[ity] Посмотреть сообщение
Вышеописанный кусок кода с использованием DLL вызывает у меня AV. Увы...
Мой? А вы точно перекомпилировали и exe и dll?
0
virtual[ity]
157 / 137 / 64
Регистрация: 05.06.2010
Сообщений: 610
08.10.2016, 20:30  [ТС] #23
Всем спасибо за помощь! Тему можно закрывать.

MyEternity, воспользовался Вашим примером, огромное спасибо, про OpenFileName даже и не знал, если честно.
Сейчас разбираюсь со структурой.
0
MyEternity
96 / 96 / 25
Регистрация: 25.04.2016
Сообщений: 525
08.10.2016, 20:44 #24
Цитата Сообщение от virtual[ity] Посмотреть сообщение
MyEternity, воспользовался Вашим примером, огромное спасибо, про OpenFileName даже и не знал, если честно.
Сейчас разбираюсь со структурой.
Описание структуры, где взял ее я.
А все-таки, поделитесь секретом, зачем вам пихать в dll это дело?
0
BOGG ART
576 / 444 / 146
Регистрация: 09.12.2013
Сообщений: 2,384
Записей в блоге: 2
08.10.2016, 20:49 #25
Лучше тута: http://www.vsokovikov.narod.ru/New_M...enfilename.htm

Да хоть просто для практики. Мой пример у меня работает как часы. Подозреваю вы не пересобрали DLL после изменения кода, периодически такое случается.
0
virtual[ity]
157 / 137 / 64
Регистрация: 05.06.2010
Сообщений: 610
08.10.2016, 20:54  [ТС] #26
Всегда хранил prcdre и func в отдельном юните.
Теперь решил все это дело перенести в DLL, объясню сейчас почему.
А дело в том, что в проекте использую ресурсы типа ico, png, jpg в достаточном количестве и чтобы в самом exe не хранить (с целью уменьшения размерности файла), выношу все в DLL ну и в том числе решил так же поступить с prcdre, func. Я читал, но поверхностно про то, что это же можно успешно делать при помощи bpl пакетов - увы, пока что не дошел до них.

Добавлено через 1 минуту
BOGG ART, Спасибо, именно тут я и черпаю информацию
Пересобрал - это точно, работаю с projectgroup и компилю на всяких случай сразу все. Ну не хочет у меня и всё (AV). Скорее всего, все таки что то не так делаю.
0
MyEternity
96 / 96 / 25
Регистрация: 25.04.2016
Сообщений: 525
08.10.2016, 20:59 #27
virtual[ity], Resource DLL я могу понять, но для разделения кода у вас все-таки недостаточно опыта - вы в итоге плюнете на это дело, устав бороться с постоянными трудноуловимыми EAV и утечками. Хотя, воля ваша.
Общий совет насчет длл дам такой - ВСЕГДА передавайте ТОЛЬКО указатели, используйте явно заданное соглашение, например stdcall. Объект должен освобождаться там, где был создан (dll/exe), вместе с указателем передавайте размер буфера, который вы ожидаете. Самый true-way смотреть на то, как реализован Windows API.
0
08.10.2016, 20:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2016, 20:59
Привет! Вот еще темы с решениями:

Не работает функция из dll библиотеки
Здравствуйте. Помогите, пожалуйста, найти неполадки. В приложении нужно ввести...

Функция в DLL, Invalid pointer operation
Всем доброго дня! Есть такая проблема: имеется dll с тремя функциями, которые...

Организация диалога с пользователем
В общем, есть код программы(рисует график функции): unit Graf; interface...

Печать посредством диалога PrintDialog
Как реализовать? Хочу распечатать например заголовок метки


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru