Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Классы : конструктор и деструктор [D7]


Страницы:   1 2

parovoZZ ©   (2006-07-08 21:47:00) 

Здарова

Не могу никак въехать, как выделить память для экземпляра класса. Класс вида

type
 TADOConnection = class
   procedure SetConnectionString (const Value : ShortString);
   procedure SetConnected (const Value : boolean);
   function GetConnected : boolean;
   function GetErrors : Errors;
 public
   constructor Create;
   destructor Destroy;
 published
   property ConnectionString : ShortString write SetConnectionString;
   property Connected : boolean read GetConnected write SetConnected;
   property Errors : Errors read GetErrors;
 end;


Что писать в constructor и destructor? И вообще, нужны ли они в данном случае?


Desdechado   (2006-07-11 11:14:00) [1]

Да то, что при работе ты явно запутаешься (если, конечноЮ компилятор пропустит), с каким из адо ты будешь работать.
Лишние колючки для своей з...ы выращивать - странное желание.


parovoZZ   (2006-07-10 20:26:00) [2]


> Ты что, пытаешься написать свое ADO ?

Нет, ADO лежит в dll.
> > type>  TADOConnection = classТакой класс уже есть. Я бы
> тебе порекомендовал его как-нибудь иначе назвать.

И ЧТО?


Ega23   (2006-07-10 12:07:00) [3]


> type
>  TADOConnection = class


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


Desdechado   (2006-07-10 11:48:00) [4]

Ты что, пытаешься написать свое ADO ?


Loginov Dmitry   (2006-07-09 23:47:00) [5]

> "Алгоритмы и структуры данных в Delphi". Весьма неплохая
> книга.


А млин, я ж ее не давече, чем пару месяцев назад прочел...

Склероз, прямо :)


tesseract   (2006-07-09 23:45:00) [6]

> "Алгоритмы и структуры данных в Delphi". Весьма неплохая
> книга.


Лучшая по Delphi по мнению забугорных Delphi-стов. :-)


tesseract   (2006-07-09 23:44:00) [7]

Джулиан Бакнелл
"Фундаментальные алгоритмы и структуры данных на Delphi"

У меня от чтения почти развалилась :-)

Must Read начинающим и студентам.


Джо   (2006-07-09 23:43:00) [8]

> [19] Loginov Dmitry ©   (09.07.06 23:41)
> > Лучше читать Бакнелла.
>
>
> А это что за крендель?

"Алгоритмы и структуры данных в Delphi". Весьма неплохая книга.


Loginov Dmitry   (2006-07-09 23:41:00) [9]

> Лучше читать Бакнелла.


А это что за крендель?

Я вообще-то предпочитаю Тейксейра & Пачеко...


tesseract   (2006-07-09 23:15:00) [10]

> [17] Loginov Dmitry ©   (09.07.06 22:50)


Не читай книги "стань Билло Гейтсом за 24 часа"
Лучше читать Бакнелла.


Loginov Dmitry   (2006-07-09 22:50:00) [11]

> tesseract ©   (09.07.06 16:35) [16]


Все это на днях прочел в какой-то умной буржуйской книжке по Delphi 5 :)


tesseract   (2006-07-09 16:35:00) [12]

> Все объекты должны создаваться и унижтожаться в DLL.


В пределах однойфункции. Про объекты в DDL столько копий поналомано ......


> В "обертке" не можнет быть конструкторов или деструкторов.

С чего бы это? Могут быть.  


> Все вызываемые методы должны быть абстрактными.

Не все, только те которые перекрываются.

Например у меня абстрактный метод Read класса потока чтения с порта.
Но метод StartThread одинаков для всех потомков - зачем его перекрывать.

Пересмотрите свое мнение об ООП ИМХО.


parovoZZ   (2006-07-09 15:22:00) [13]


> В "обертке" не можнет быть конструкторов или деструкторов.
>  Все вызываемые методы должны быть абстрактными. Все объекты
> должны создаваться и унижтожаться в DLL. Только так можно
> работать с классом, хранимым в DLL (хотя есть еще интерфейсы
> и пакеты).

Штурмуйте

unit ADO;

interface

type
TErrors = packed record
 NativeError : integer;
 Description : ShortString;
end;

type
 Errors   = TErrors;

type
 TADOConnection = class
 private
   procedure SetConnectionString (const Value : ShortString);
   procedure SetConnected (const Value : boolean);
   function GetConnected : boolean;
   function GetErrors : Errors;
 published
   property ConnectionString : ShortString write SetConnectionString;
   property Connected : boolean read GetConnected write SetConnected;
   property Errors : Errors read GetErrors;
 end;

TADOCommand = class
private
  procedure SetCommandText (const Value : ShortString);
published
  property CommandText : ShortString write SetCommandText;
  procedure Execute;
end;

TADODataSet = class
private
  procedure SetCommandText (const Value : ShortString);
  function GetRecordCount : integer;
published
  property CommandText : ShortString write SetCommandText;
  property RecordCount : integer read GetRecordCount;
  procedure Open;
  procedure Close;
  procedure ParamByName (const Param : ShortString; Value : Variant);
  procedure Next;
  function FieldByNameAsString (const FieldByName : ShortString) : ShortString;
  function FieldByNameAsInteger (const FieldByName : ShortString) : integer;
end;

procedure Init; stdcall;
procedure UnInit; stdcall;
procedure SetConnectionStringd (aString : ShortString); stdcall;
function GetConnectedd : boolean; stdcall;
procedure SetConnectedd (Connection : boolean); stdcall;
procedure SetCmdCommandText (Text : ShortString); stdcall;
procedure CmdExecute; stdcall;
procedure SetDSCommandText (Text : ShortString); stdcall;
procedure DSOpen; stdcall;
procedure DSClose; stdcall;
procedure DSParamByName (const Param : ShortString; Value : Variant); stdcall;
function DSFieldByNames (const FieldByName : ShortString) : ShortString; stdcall;
function DSFieldByNamei (const FieldByName : ShortString) : integer; stdcall;
function DSRecordCount : integer; stdcall;
procedure DSNext; stdcall;
function GetErrorsd : Errors; stdcall;

const
ADOdll  = 'bin/MySQL_driver';

implementation

procedure TADOConnection.SetConnectionString (const Value : ShortString);
begin
SetConnectionStringd (Value);
end;

procedure TADOConnection.SetConnected (const Value : boolean);
begin
SetConnectedd (Value);
end;

function TADOConnection.GetConnected : boolean;
begin
result := GetConnectedd;
end;

function TADOConnection.GetErrors : Errors;
begin
result := GetErrorsd;
end;

procedure TADOCommand.SetCommandText (const Value : ShortString);
begin
SetCmdCommandText (Value);
end;

procedure TADOCommand.Execute;
begin
CmdExecute;
end;

procedure TADODataSet.SetCommandText (const Value : ShortString);
begin
SetDSCommandText (Value);
end;

procedure TADODataSet.Open;
begin
DSOpen;
end;

procedure TADODataSet.Close;
begin
DSClose;
end;

procedure TADODataSet.ParamByName(const Param : ShortString; Value : Variant);
begin
DSParamByName (Param, Value);
end;

function TADODataSet.FieldByNameAsString (const FieldByName : ShortString) : ShortString;
begin
result := DSFieldByNames (FieldByName);
end;

function TADODataSet.FieldByNameAsInteger (const FieldByName : ShortString) : integer;
begin
result := DSFieldByNamei (FieldByName);
end;

function TADOdataset.GetRecordCount : integer;
begin
result := DSRecordCount;
end;

procedure TADODataSet.Next;
begin
DSNext;
end;

procedure Init; external ADOdll; stdcall;
procedure UnInit; external ADOdll; stdcall;
procedure SetConnectionStringd (aString : ShortString); external ADOdll name 'SetConnectionString'; stdcall;
function GetConnectedd : boolean; external ADOdll name 'GetConnected'; stdcall;
procedure SetConnectedd (Connection : boolean); external ADOdll name 'SetConnected'; stdcall;
procedure SetCmdCommandText (Text : ShortString); external ADOdll name 'SetCmdCommandText'; stdcall;
procedure CmdExecute; external Adodll name 'CmdExecute'; stdcall;
procedure SetDSCommandText (Text : ShortString); external ADOdll name 'SetDSCommandText'; stdcall;
procedure DSOpen; external ADOdll name 'DSOpen'; stdcall;
procedure DSClose; external ADOdll name 'DSClose'; stdcall;
procedure DSParamByName (const Param : ShortString; Value : Variant); external ADOdll name 'DSParamByName'; stdcall;
function DSFieldByNames (const FieldByName : ShortString) : ShortString; external ADOdll name 'DSFieldByNames'; stdcall;
function DSFieldByNamei (const FieldByName : ShortString) : integer; external ADOdll name 'DSFieldByNamei'; stdcall;
function DSRecordCount : integer; external ADOdll name 'DSRecordCount'; stdcall;
procedure DSNext; external ADOdll name 'DSNext'; stdcall;
function GetErrorsd : Errors; external ADOdll name 'GetErrors'; stdcall;

end.


parovoZZ   (2006-07-09 15:20:00) [14]

Если б была литературка, почитал бы. А та, что есть, там всё поверхностно. Изучать приходится по исходникам.


Ketmar   (2006-07-09 11:46:00) [15]

хм... а может, сначала литературку почитать по ООП? глядишь, куча вопросов исчезнет...


XbI   (2006-07-09 10:55:00) [16]


> А как убить?

MyClass.Free;


Loginov Dmitry   (2006-07-09 10:08:00) [17]

> Компонент ADOConnection у меня находится в dll, а этот класс
> всего лишь "обёртка".


В "обертке" не можнет быть конструкторов или деструкторов. Все вызываемые методы должны быть абстрактными. Все объекты должны создаваться и унижтожаться в DLL. Только так можно работать с классом, хранимым в DLL (хотя есть еще интерфейсы и пакеты).


parovoZZ   (2006-07-09 02:54:00) [18]


> > Меня напрягает, что ...А этот свой класс ты писАл сам?
>  Или пользовал Copy+Paste?


Компонент ADOConnection у меня находится в dll, а этот класс всего лишь "обёртка".


> > Как от них избавится?А зачем?


Да ну их, мешаютЪ мне.


> DrPass ©   (09.07.06 02:43) [9]
> > В RunTime Он и будет равен nil до тех пор, пока ты не создашь
> экземпляр MyClass:= TMyClass.Create(...)

А как убить?


DrPass   (2006-07-09 02:43:00) [19]


> В RunTime

Он и будет равен nil до тех пор, пока ты не создашь экземпляр MyClass:= TMyClass.Create(...)


Германн   (2006-07-09 02:32:00) [20]


> Меня напрягает, что ...

А этот свой класс ты писАл сам? Или пользовал Copy+Paste?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо