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

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

массив из oleacc.IAccessible через TList [D7]


istok20 ©   (2016-04-22 10:49:00) 

подскажите, как организовать запись\чтение множества переменных типа oleacc.IAccessible  используя TList ?


sniknik   (2016-04-25 11:01:00) [1]

> можете показать пример, как сделать на типизированном указателе?
пример sniknik ©   (22.04.16 11:44) [3]
как раз типизированный.


sniknik   (2016-04-25 11:00:00) [2]

> т.е. такой код потенциально опасен? погонял, пока что не было проблем...
ну, размерность не совпадает, очевидно. а нет проблем может от того что память выделяется минимальными блоками в 16 байт, т.е. даже с выходом хватает, мало данных и случайно еще не пересекаются, не заметил, или еще чего...

но я бы не рискнул так писать.


istok20   (2016-04-23 22:33:00) [3]


> sniknik ©   (23.04.16 00:12) [8]


т.е. такой код потенциально опасен? погонял, пока что не было проблем...


> KilkennyCat ©   (23.04.16 09:46) [9]


можете показать пример, как сделать на типизированном указателе?


KilkennyCat   (2016-04-23 09:46:00) [4]

зачем использовать нетипизированный указатель, когда тип известен?


sniknik   (2016-04-23 00:12:00) [5]

интерфейс размерность 16 байт, поинтер 4, да уж "норм" решение.


istok20   (2016-04-22 17:55:00) [6]

вот норм решение предложили)

function AddAccessible(AList: TList; AAccessible: IAccessible): Integer; inline;
begin
 Result := AList.Add(Pointer(AAccessible));
 AAccessible._AddRef;
end;

procedure DeleteAccessible(AList: TList; AIndex: Integer); inline;
var
 Accessible: IAccessible;
begin
 Accessible := IAccessible(AList[AIndex]);
 Accessible._Release;
 AList.Delete(AIndex);
end;

function GetAccessible(AList: TList; AIndex: Integer): IAccessible; inline;
begin
 Result := IAccessible(AList[AIndex]);
end;


istok20   (2016-04-22 11:53:00) [7]

у меня

aia: oleacc.IAccessible;

как с ним будет выглядеть? тоже отдельный указатель объявлять?


sniknik   (2016-04-22 11:49:00) [8]

ну и да, я бы лучше не с указателями, а на объектах бы сделал (TObjectList)...  проблем меньше, освобождать не нужно, только свой объект описать и вместо New его создавать.


sniknik   (2016-04-22 11:45:00) [9]

ну да, Dispose забыл.  точно без гарантий.


sniknik   (2016-04-22 11:44:00) [10]

без проверок/гарантий, и на других обьектах
procedure TForm1.Button1Click(Sender: TObject);
var
 PRecordset: ^_Recordset;
begin
 List:= TList.Create;
 New(PRecordset);
 PRecordset^:= CoRecordset.Create;
 List.Add(PRecordset);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 Recordset: _Recordset;
begin
 Recordset:= _Recordset(List.Items[0]^);
 List.Delete(0);
 if Recordset.State = 0 then Caption:= 'Closed'
 List.Free;
end;


istok20   (2016-04-22 11:21:00) [11]


> добавляешь туда указатели на интерфейсы


угу, весь вопрос как добавлять указатель и читать его, можете показать?


sniknik   (2016-04-22 11:17:00) [12]

в смысле "организовать"? создаешь список, добавляешь туда указатели на интерфейсы... обычная работа с TList. не работает что то?


Наверх

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