![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Классы : конструктор и деструктор [D7]
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?