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