Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Вниз

Daclare in other units   Найти похожие ветки 

 
ronyn   (2006-08-04 01:17) [0]

Как сделать, что бы  переменная из модуля Project1 была видна в модуле Unit1?


 
SerJaNT ©   (2006-08-04 02:25) [1]

public ?


 
Джо ©   (2006-08-04 02:26) [2]

uses


 
Юрий Зотов ©   (2006-08-04 02:29) [3]

В смысле - переменная объявлена в DPR, а должна быть видна в одном из юнитов?

Перенесите ее объявление в этот или другой юнит и укажите его в uses тех модулей, где она должна быть видна (включая и DPR).


 
ronyn   (2006-08-05 00:34) [4]

Я дублирую объявление переменной: в dpr объявляю и в файле юнита тоже. Может элементарную вещь в коде пропускаю? Если не сложно - небольшой пример.


 
Kolan ©   (2006-08-05 00:39) [5]


> Я дублирую объявление переменной:

И получаешь разные переменные.


> Если не сложно - небольшой пример.

Вот модуль:

unit Unit3;

interface

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

type
 TForm3 = class(TForm)
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form3: TForm3;


implementation

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
begin

end;

end.


Переменная Form3 в нем объявлена.

А вот DPR:
program Project1;

uses
 Forms,
 Unit3 in "Unit3.pas" {Form3};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm3, Form3);
 Application.Run;
end.


ВИдиш модуль подключен в uses...

Теперь можно в dpr пользоваться переменной Form3:

begin
 Application.Initialize;
 Application.CreateForm(TForm3, Form3);
 Application.Run;
 Form3.Hide;
end.


 
Пусик ©   (2006-08-05 00:49) [6]

;)

program VarExport;

uses
 Forms,
 Unit1 in "Unit1.pas" {Form1};

{$R *.res}

var
 TestVar: Integer;

 exports
   TestVar;

begin
 TestVar := 1;
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.


unit Unit1;

interface

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

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

var
 Form1: TForm1;
 TestVar: PInteger;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 H: THandle;
begin
 H := LoadLibrary("VarExport.exe");
 TestVar := GetProcAddress(H,"TestVar");
 ShowMessage(IntToStr(TestVar^));
 FreeLibrary(H);
end;

end.


 
ronyn   (2006-08-05 00:58) [7]

program Project1;

uses
 Forms,
 Unit1 in "Unit1.pas" {Form1};

{$R *.res}
var public,
i:integer;
  exports i;
begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 i:=5;
 Application.Run;
end.

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   procedure FormShow(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }

 end;

var
 Form1: TForm1;
 i:integer;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
caption:=inttostr(i);
end;

end.


Помоему почти идентично. Не работает. Может упустил что.


 
Kolan ©   (2006-08-05 01:00) [8]


> Помоему почти идентично. Не работает. Может упустил что.
>
>

Смайл видел?

> Пусик ©   (05.08.06 00:49) [6]
>
> ;)


Переменную объяви в МОДУЛЕ и подключай его везде где надо...


 
Шпиён   (2006-08-05 01:07) [9]


> Помоему почти идентично.

Идентично чему?


 
Пусик ©   (2006-08-05 01:17) [10]


> Kolan ©   (05.08.06 01:00) [8]
>Переменную
> объяви в МОДУЛЕ и подключай его везде где надо...


А зачем? Мне, например, не надо в отдельном модуле.


 
Kolan ©   (2006-08-05 01:19) [11]

Ну если вы пользуетесь Пусик ©   (05.08.06 00:49) [6], то ... делайте так как вам надо...


 
ronyn   (2006-08-05 23:02) [12]

Где именно в модуле? Я пробывал разные варианты. Таки получаются просто разные переменные.


 
Loginov Dmitry ©   (2006-08-05 23:11) [13]

Читай [3]


 
palva ©   (2006-08-05 23:39) [14]

Переменная объявленная в dpr не будет видна в других модулях, поскольку модуль dpr не является unit"ом. Чтобы переменная была видна в других модулях, она должна быть описана в юните в секции interface, а в других модулях (в которых она требуется) этот юнит должен быть присоединен при помощи предложения uses. Переменная должна быть описана только один раз, иначе возникнет конфликт имен и компиляция не пройдет.


 
ronyn   (2006-08-06 22:40) [15]

Ну, да! Эффективный способ объявления глобальных переменных. Отдельный  Unit для объявления. Работает.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.043 c
1-1152725669
Pavel__
2006-07-12 21:34
2006.08.27
Убрать иконку из заголовка окна


2-1155091024
vladimirg88
2006-08-09 06:37
2006.08.27
JPEG


15-1154246097
Ega23
2006-07-30 11:54
2006.08.27
С Днём рождения! 29 июля


1-1152796491
KygECHuK
2006-07-13 17:14
2006.08.27
Разграничение доступа


6-1143963165
Malik
2006-04-02 11:32
2006.08.27
Взлом сетей и как с этим бороться





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский