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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2007, 16:40   #1
Саня
Пользователь
 
Регистрация: 08.01.2007
Сообщений: 30
Вопрос DLL:переменная-ссылка на компонент формы

Это опять я.
Граждане! У меня такая проблемма:
пишу программу с использованием DLL-библиотеки(dll-ку хочу сделать универсальной для всех моих программ), в принципе всё что задумал почти всё выполнил, но работа библиотеки заключается в управлении компонентами на форме, к которой она подключена.
Так как же мне всё таки передать в подключаемую функцию компонент или ссылку на него, чтобы все его свойства и методы были доступны и там
Я не волшебник, я только учусь!
Саня вне форума Ответить с цитированием
Старый 02.08.2007, 16:58   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Создай в ДЛЛ переменку типа TFormXX (как в юните) и передавай ей через Поинтер, которй потом разименовывай.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.08.2007, 17:21   #3
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

Цитата:
Сообщение от Саня Посмотреть сообщение
Это опять я.
Граждане! У меня такая проблемма:
пишу программу с использованием DLL-библиотеки(dll-ку хочу сделать универсальной для всех моих программ), в принципе всё что задумал почти всё выполнил, но работа библиотеки заключается в управлении компонентами на форме, к которой она подключена.
Так как же мне всё таки передать в подключаемую функцию компонент или ссылку на него, чтобы все его свойства и методы были доступны и там
Ну, сама dll и нужна для того,чтобы получать какие-то результаты выполнения ф-ии..... Создаешь dll, в ней функцию , Например:
function Sum(x,y:integer): integer;Stdcall;
В самой dll делаешь exports sum или можно еще индекс влупить (exports sum index 11), после чего обращение по индексу, а не по имени.....
В главной форме после implemention объявляешь : function Sum;external 'имя ДЛЛ .dll' name Sum.... Тут ты говоришь, что функция внешняя и берется из dll .... указываешь имя dll...
Ну а в саму функцию передавай нужные переменные....
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp

Последний раз редактировалось Pitbull; 02.08.2007 в 17:23.
Pitbull вне форума Ответить с цитированием
Старый 02.08.2007, 17:26   #4
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

Цитата:
Сообщение от Саня Посмотреть сообщение
Это опять я.
Граждане! У меня такая проблемма:
пишу программу с использованием DLL-библиотеки(dll-ку хочу сделать универсальной для всех моих программ), в принципе всё что задумал почти всё выполнил, но работа библиотеки заключается в управлении компонентами на форме, к которой она подключена.
Так как же мне всё таки передать в подключаемую функцию компонент или ссылку на него, чтобы все его свойства и методы были доступны и там
Извини, не допонял тебя....Такого я не делал.. Из dll передавал объекты, а вот в dll не пробовал загнать.. Завтра попробую... Сейчас нужно уходить домой...Извини
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Pitbull вне форума Ответить с цитированием
Старый 02.08.2007, 17:33   #5
Саня
Пользователь
 
Регистрация: 08.01.2007
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Создай в ДЛЛ переменку типа TFormXX (как в юните) и передавай ей через Поинтер, которй потом разименовывай.
А можно по-подробнее про TFormXX... Где находится описание, в каком модуле? При компиляции выдает ошибку Undeclared Identifier TFormXX.
Или я что-то не понял?
Я не волшебник, я только учусь!

Последний раз редактировалось Саня; 02.08.2007 в 17:45. Причина: Не дописал
Саня вне форума Ответить с цитированием
Старый 03.08.2007, 08:48   #6
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

Цитата:
Сообщение от Саня Посмотреть сообщение
А можно по-подробнее про TFormXX... Где находится описание, в каком модуле? При компиляции выдает ошибку Undeclared Identifier TFormXX.
Или я что-то не понял?
Ну , TFormXX - это ссылка на твою форму, которая будет передавать данные.... Например , TForm1.....
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Pitbull вне форума Ответить с цитированием
Старый 03.08.2007, 09:15   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот смотри примерно так :

Это форма:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure q(rr:Tform1); external 'Project2.dll';
var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
q(form1);
end;

end.


А Это Библа :

library Project2;

uses
unit1,
SysUtils,
Classes;

{$R *.res}
procedure q(rr:Tform1);
begin
rr.Caption:='ss';
end;

exports q;
begin

end.


Попробуй так.
Ну а насчет указателей это зависит от задачи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.08.2007, 09:51   #8
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

Там еще б stdCall не помешало...Просто Вашу Dll могут юзать Visual С++ программеры ... И у них могут возникнуть проблеммы с вызовом такой dll..... Для избежания - stdcall
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;


type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);


private
{ Private declarations }
public
{ Public declarations }
end;
procedure cap(r:Tform);stdcall;
var
Form1: TForm1;

implementation
procedure cap(r:Tform); external 'Project3.dll';

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin
cap(form1);

end;

end.






library Project3;

uses
SysUtils,
Classes,unit2;
procedure cap(r:TForm1);stdCall;
begin
r.caption:='dfdfdfd';
end;

exports cap;

{$R *.res}



begin
end.
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp

Последний раз редактировалось Pitbull; 03.08.2007 в 09:54.
Pitbull вне форума Ответить с цитированием
Старый 03.08.2007, 10:18   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Согласен. Лень, батенька, чтука сильная, особенно когда руками по Клаве...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.08.2007, 10:38   #10
Саня
Пользователь
 
Регистрация: 08.01.2007
Сообщений: 30
По умолчанию

Огромное, просто огромное спасибо!!!
Всё работает! Есть пару ньюансов с подключением собственных модулей, но я разберусь.
Я не волшебник, я только учусь!
Саня вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая переменная kezman Общие вопросы C/C++ 1 29.07.2008 13:49
Как программно удалить компонент от формы или другого компонента (контейнера)? SkAndrew Общие вопросы Delphi 3 27.05.2008 15:20
Перемещение формы за компонент Zeraim Общие вопросы Delphi 2 20.05.2008 09:26
Как убрать/уничтожить с формы компонент TImage? ZhekON Общие вопросы Delphi 11 11.03.2008 17:28