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

Вниз

Проблема с вызовом процедуры из DLL   Найти похожие ветки 

 
Volf_555 ©   (2006-04-15 23:12) [0]

Следующий код пробывал реализовать в обычной программе - всё в норме. Но когда я переношу код в DLL - возникают непонятные ошибки...
Привожу код:

library Zones;

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

{$R *.res}

procedure GetMyZones;
var
MyForm:TForm1;
begin
MyForm:=TForm1.Create(Application);
MyForm.GetZones;
MyForm.Show;
end;

exports
GetMyZones;

begin
end.


Unit1.pas:

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   ListView1: TListView;
   Panel2: TPanel;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   procedure GetZones;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.GetZones;
const
p="Software\Microsoft\Windows\CurrentVersion\Internet Settings\";
var
reg:TRegistry;
a,b:TStringList;
res,q:Integer;
ztype,zsite,zname,zdesc:String;
begin
a:=TStringList.Create;
b:=TStringList.Create;
reg:=TRegistry.Create;
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey(p+"ZoneMap\Domains",false);
reg.GetKeyNames(a);
form1.listview1.Items.Clear;
if a.Count>0 then
 for q:=0 to a.Count-1 do
 begin
  reg.CloseKey;
  reg.OpenKey(p+"ZoneMap\Domains\"+a.Strings[q],false);
  reg.GetValueNames(b);
  res:=reg.ReadInteger(b.Strings[0]);
  reg.CloseKey;
  reg.OpenKey(p+"Zones\"+IntToStr(res),false);

  ztype:=b.Strings[0];
  zsite:=ztype+"://*."+a.Strings[q];
  zname:=reg.ReadString("DisplayName");
  zdesc:=reg.ReadString("Description");

  form1.listview1.Items.Add.Caption:=zsite;
  form1.listview1.Items.Item[q].SubItems.Add(zname);
  form1.listview1.Items.Item[q].SubItems.Add(zdesc);
 end;
end;

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

end.


В ListView1 необходимо ещё создать три столбца с заголовками:
"Сайт"
"Название зоны"
"Описание"

В реестре записей может у вас не быть. Так что можете временно добавить некоторые записи. Вот REG-файл:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains]
@=""

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\forum]
"http"=dword:00000001

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\webmoney.ru]
"https"=dword:00000002


Что здесь не так? Как исправить?
P.S.: вызов DLL из главной программы делаю так:
...
procedure GetMyZones; external "Zones.dll"; //объявление
...
GetMyZones; //вызов


 
Leonid Troyanovsky ©   (2006-04-15 23:22) [1]


> Volf_555 ©   (15.04.06 23:12)  

> Что здесь не так? Как исправить?


Зачем выносить работоспособный код в dll?
А исправить просто - вернуть в зад.

--
Regards, LVT.


 
Volf_555 ©   (2006-04-15 23:26) [2]


> Leonid Troyanovsky ©   (15.04.06 23:22) [1]
>
> > Volf_555 ©   (15.04.06 23:12)  
>
> > Что здесь не так? Как исправить?
>
>
> Зачем выносить работоспособный код в dll?
> А исправить просто - вернуть в зад.
>
> --
> Regards, LVT.

В смысле выносить? А зачем DLL предназначены то?
DLL очень удобно использовать для экономии ресурсов компьютера


 
Leonid Troyanovsky ©   (2006-04-15 23:30) [3]


> Volf_555 ©   (15.04.06 23:26) [2]

> В смысле выносить? А зачем DLL предназначены то?

Это тяжелое наследие мрачных времен.

> DLL очень удобно использовать для экономии ресурсов компьютера

Ничего dll не экономит.
Насчет удобства ты уже убедился (не первый).

--
Regards, LVT.


 
Германн ©   (2006-04-16 01:33) [4]


> MyForm:=TForm1.Create(Application);


 
Volf_555 ©   (2006-04-16 02:21) [5]


> Германн ©   (16.04.06 01:33) [4]
>
> > MyForm:=TForm1.Create(Application);

Тоже думал по поводу этой строчки, но так и не придумал ничего....
На что заменить надо, не подскажете?


 
Германн ©   (2006-04-16 02:36) [6]


> Volf_555 ©   (16.04.06 02:21) [5]
>
>
> > Германн ©   (16.04.06 01:33) [4]
> >
> > > MyForm:=TForm1.Create(Application);
>
> Тоже думал по поводу этой строчки, но так и не придумал
> ничего....
> На что заменить надо, не подскажете?


А на что указывает Application  в этой строчке?


 
Volf_555 ©   (2006-04-16 04:32) [7]


> Германн ©   (16.04.06 02:36) [6]
>
> > Volf_555 ©   (16.04.06 02:21) [5]
> >
> >
> > > Германн ©   (16.04.06 01:33) [4]
> > >
> > > > MyForm:=TForm1.Create(Application);
> >
> > Тоже думал по поводу этой строчки, но так и не придумал
>
> > ничего....
> > На что заменить надо, не подскажете?
>
>
> А на что указывает Application  в этой строчке?

Как бы на приложение, но DLL - это не приложение =>> вместо Application нужно написать другое значение. Так? Только что? Пробывал nil - тоже не выходит...


 
Германн ©   (2006-04-17 01:44) [8]


> Как бы на приложение, но DLL - это не приложение =>> вместо
> Application нужно написать другое значение. Так? Только
> что? Пробывал nil - тоже не выходит..


Первое приближение совмещающее формы и длл - это "однозначность" Application в программе и в DLL. По умолчанию в программе создаётся свой объект TApplication, и в DLL - свой!



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

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

Наверх




Память: 0.47 MB
Время: 0.009 c
2-1147259154
alles
2006-05-10 15:05
2006.05.28
Переполнение типа Byte


2-1147329642
zorik
2006-05-11 10:40
2006.05.28
Как выделить в Екселе лист по его названию?


15-1146772800
homm
2006-05-05 00:00
2006.05.28
баян, не баян?


15-1146749987
grisme
2006-05-04 17:39
2006.05.28
Непрерывный сигнал из порта


15-1146330901
dyd
2006-04-29 21:15
2006.05.28
Бесплатный хостинг





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский