Форум: "Основная";
Текущий архив: 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.012 c