Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
6 / 6 / 0
Регистрация: 05.10.2019
Сообщений: 300

Как импортировать переменную из exe в dll?

03.12.2020, 16:10. Показов 2737. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Hi , как импортировать переменную из exe в dll?
Или как можно реализовать совместное использование переменной?
У меня есть dll, dllForm, Exe.

Хотела получать Handle загруженной DLL, после чего передать его формедлл, и при закрытии освобождать память.
А также сделать проверку на следующее, если хоть одна форма открыта, то память не может быть освобождена.
Думала применить какой нибудь счётчик, при создании формы +1 к счётчику, при закрытии -1, если при закрытии значение счётчика равно 1, то в этом случае освобождаем память от библиотеки.
Может быть нужно как то по другому, не знаю.

dll:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
library Project1;
 
uses
  System.SysUtils,
  System.Classes,
  dllForm1 in 'dllForm1.pas' {dll1};
 
{$R *.res}
 
procedure ShowDllForm; stdcall;
begin
  dll1 := Tdll1.Create(nil);
  dll1.Show;
end;
 
Function PlusMin (a,b: Integer): string;
begin
  result:= inttostr(a + b);
  dll1.Edit1.Text:=result;
end;
 
Exports
    ShowDllForm,
    PlusMin;
begin
end.
dllForm:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
unit dllForm1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
 
type
  Tdll1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
 
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
 
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  dll1: Tdll1;
 
implementation
 
{$R *.dfm}
 
 
procedure Tdll1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// Я хотела при закрытии формы освобождать память от библиотеки, но хочу сделать так, чтобы память освобождалась только тогда, когда закроется последняя формаДЛЛ
    // FreeLibrary(strtoint(c));
  Action := caFree;
end;
 
end.
Exe:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button3: TButton;
    procedure Button3Click(Sender: TObject);
  private
 
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  dHandle: THandle;                
implementation
 
{$R *.dfm}
 
 
procedure TForm1.Button3Click(Sender: TObject);
var
dHandle: THandle;     
PlusMin:    function (a,b: Integer): string; 
ShowDllForm: procedure ;stdcall;
begin
@PlusMin:=nil;
@ShowDllForm:=nil;
 dHandle:=LoadLibrary('Project1.dll');
 
 if dHandle<>0 then
    begin
    @ShowDllForm:=GetProcAddress(dHandle,'ShowDllForm');
    if @ShowDllForm<>nil then
          begin
           ShowDllForm;
           end
      else         
          begin
           showmessage('Результат: процедура ShowDllForm не найдена в Dll');
          Exit;
          end;
 
    @PlusMin:=GetProcAddress(dHandle,'PlusMin');
    if @PlusMin<>nil then
          begin
           PlusMin(strtoint(Edit1.Text), strtoint(Edit2.Text));
           end
      else       
          begin
           showmessage('Результат: Функция PlusMin не найдена в Dll');
          Exit;
          end;
     //FreeLibrary(dHandle); //
    end
    else
    begin
       showmessage('Результат: Библиотека не найдена');
      Exit;
    end;
 
end;
 
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.12.2020, 16:10
Ответы с готовыми решениями:

Как импортировать нестандартную DLL
Ну собственно вопрос сформулировал. С импортом стандартных билиотек вроде всё ясно. Есть несколько написаных мной dll-ок на assme...

Как импортировать и экспортировать из dll класс?
Помогите, плз. Создал dll: //... class __declspec(dllexport) a { public : a(); }; a::a() {

Как импортировать стороннюю DLL в программу?
Здравствуйте! Интересуюсь как импортировать стороннюю DLL в программу так, что бы и на других ПК программа работала?

20
6 / 6 / 0
Регистрация: 05.10.2019
Сообщений: 300
10.12.2020, 23:06  [ТС]
Студворк — интернет-сервис помощи студентам
Попробую Arcor
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.12.2020, 23:06

Как импортировать в проект DLL PublicKeyToken
Доброго времени суток. - Есть DLL библиотека подписанная токен ключом; - Есть приложения работающее под WinCE 6.0; Проблема...

Как импортировать DLL файл игры в программу
Данная Dll содержится в игре. Я хочу посмотреть содержимое dll и использовать их в своей программе

Как притулить метод на выполнение с DLL , без ошибочного завершения как DLL не будет c EXE
Как притулить метод на выполнение с DLL , без ошибочного завершения как DLL не будет c EXE using System; using...

Как в C# импортировать функцию из DLL C++, которая возвращает интерфейсное значение?
Мне нужно получить из библиотеки C++ функцию, возвращающую интерфейс. Однако на стороне шарповского кода возникает ошибка (ниже). ...

Как множество dll собрать в один dll или exe файл?
Сделал тестовый проектик по работе с БД (Entity Framework), скомпилировал и как глянул в папку Debug....., а там куча dll файлов. Путем...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru