Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2011, 07:24   #1
kostya_29
 
Регистрация: 19.02.2011
Сообщений: 6
Восклицание Ошибка при загрузки названий компонентов delphi из DLL

Вот Содержимое DLL:
Код:
library dll;

uses
  SysUtils,
  Classes,
  Dialogs,
  Unit1;

procedure DllMessage; export;
begin
form1.Button1.Caption:='ааа';
form1.Button2.Caption:='аааа';
form1.Button3.Caption:='аааа';
form1.Button4.Caption:='аааа';
form1.Label2.Caption:='ааааааа';
form1.GroupBox1.Caption:='ннннннн';
form1.GroupBox2.Caption:='ннннн';
form1.RadioGroup1.Caption:='ннннн';
form1.RadioGroup2.Caption:='ннннн';
form1.RadioGroup3.Caption:='ннннн';
form1.RadioGroup4.Caption:='ннннн';
end;

exports DllMessage;

begin
end.
//====
Вот процедура уже в программе:
Код:
procedure DllMessage; external 'dll.dll'

Вот содержимое Кнопки в программе:
Код:
DllMessage;
При нажатии кнопки все компоненты должны назваться как написанно в DLL.

Но в место этого вылазиет ошибка "Access violation at address 003A22ED in module 'dll.dll'. Read of Address 000003B4 "

Как избежать этой ошибки?)
Заранее Спасибо!!!)))
kostya_29 вне форума Ответить с цитированием
Старый 23.08.2011, 08:22   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

DLL должно "знать" о какой форме речь
Передача параметра исправит ситуацию (во всяком случае, в Д2010 работает):
Код:
library Dll;

uses
  SysUtils, Classes, Dialogs, Unit1;

{$R *.res}

procedure DllMessage(Form1 : TForm1); export;
begin
  ...
  form1.Button1.Caption:='ааа';
В приложении ничего исправлять не надо.
Прик вне форума Ответить с цитированием
Старый 23.08.2011, 08:25   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Как вы из DLL обращаетесь к форме, которая находиться в основном модуле программы? Вы обращаетесь к форме которой нет в DLL, поэтому и ошибка, потому что в DLL нет формы Form1
FaTaL вне форума Ответить с цитированием
Старый 23.08.2011, 08:46   #4
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

FaTaL, к форме можно обратиться, если компилятор один и тот же для exe и dll.

Ковырять объекты не пренадлежащие dll - плохая практика. Обычно делают API либо в форме пакета функций с надлежащим соглашением о вызовах (аля WinAPI), либо если уж приспичили объекты, то используя интерфейсы COM.
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 23.08.2011, 09:02   #5
kostya_29
 
Регистрация: 19.02.2011
Сообщений: 6
По умолчанию

Прик, Спасибо Тебе!))) Работает!))

А Вот ещё проблема!, помогите мне её решить!)

Я вставил, чтобы при записке программы меняла название помпонентов из DLL.

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
DllMessage;
end;
При запуске программы, вылазиет ошибка!!

А когда я в кнопку вставлял DllMessage; ,
то всё менялось отлично))

Последний раз редактировалось Stilet; 23.08.2011 в 14:40.
kostya_29 вне форума Ответить с цитированием
Старый 23.08.2011, 09:36   #6
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
При запуске программы, вылазиет ошибка
Потому что Form1 = nil

Впрочем это не последние и не самые больные грабли, которые тебя ждут на пути приспособления DLL для решения этой задачи.

p.s. Специально для решения таких и подобных задач Борланд придумала отличный "антиграблин" - BPL.
mss вне форума Ответить с цитированием
Старый 23.08.2011, 13:54   #7
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Цитата:
Сообщение от kostya_29 Посмотреть сообщение
А Вот ещё проблема!, помогите мне её решить!)

Я вставил, чтобы при записке программы меняла название помпонентов из DLL.

procedure TForm1.FormCreate(Sender: TObject);
begin
DllMessage;
end;

При запуске программы, вылазиет ошибка!!

А когда я в кнопку вставлял DllMessage; ,
то всё менялось отлично))
Вызывай не в FromCreate, а в FormActivate
FaTaL вне форума Ответить с цитированием
Старый 24.08.2011, 08:18   #8
kostya_29
 
Регистрация: 19.02.2011
Сообщений: 6
По умолчанию

FaTaL, Спасибо, всё работает)
kostya_29 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка png компонента при загрузки капчи! DKENT Работа с сетью в Delphi 3 29.11.2010 20:04
ошибка при исполнении (что то при установке компонентов) designer999 Компоненты Delphi 0 18.10.2010 22:03
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
Ошибка при загрузки изображения Volkogriz Общие вопросы Delphi 13 13.01.2009 01:51