Форум: "Начинающим";
Текущий архив: 2018.04.22;
Скачать: [xml.tar.bz2];
Внизмассив из oleacc.IAccessible через TList Найти похожие ветки
← →
istok20 © (2016-04-22 10:49) [0]подскажите, как организовать запись\чтение множества переменных типа oleacc.IAccessible используя TList ?
← →
sniknik © (2016-04-22 11:17) [1]в смысле "организовать"? создаешь список, добавляешь туда указатели на интерфейсы... обычная работа с TList. не работает что то?
← →
istok20 © (2016-04-22 11:21) [2]
> добавляешь туда указатели на интерфейсы
угу, весь вопрос как добавлять указатель и читать его, можете показать?
← →
sniknik © (2016-04-22 11:44) [3]без проверок/гарантий, и на других обьектах
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;
← →
sniknik © (2016-04-22 11:45) [4]ну да, Dispose забыл. точно без гарантий.
← →
sniknik © (2016-04-22 11:49) [5]ну и да, я бы лучше не с указателями, а на объектах бы сделал (TObjectList)... проблем меньше, освобождать не нужно, только свой объект описать и вместо New его создавать.
← →
istok20 © (2016-04-22 11:53) [6]у меня
aia: oleacc.IAccessible;
как с ним будет выглядеть? тоже отдельный указатель объявлять?
← →
istok20 © (2016-04-22 17:55) [7]вот норм решение предложили)
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;
← →
sniknik © (2016-04-23 00:12) [8]интерфейс размерность 16 байт, поинтер 4, да уж "норм" решение.
← →
KilkennyCat © (2016-04-23 09:46) [9]зачем использовать нетипизированный указатель, когда тип известен?
← →
istok20 © (2016-04-23 22:33) [10]
> sniknik © (23.04.16 00:12) [8]
т.е. такой код потенциально опасен? погонял, пока что не было проблем...
> KilkennyCat © (23.04.16 09:46) [9]
можете показать пример, как сделать на типизированном указателе?
← →
sniknik © (2016-04-25 11:00) [11]> т.е. такой код потенциально опасен? погонял, пока что не было проблем...
ну, размерность не совпадает, очевидно. а нет проблем может от того что память выделяется минимальными блоками в 16 байт, т.е. даже с выходом хватает, мало данных и случайно еще не пересекаются, не заметил, или еще чего...
но я бы не рискнул так писать.
← →
sniknik © (2016-04-25 11:01) [12]> можете показать пример, как сделать на типизированном указателе?
пример sniknik © (22.04.16 11:44) [3]
как раз типизированный.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2018.04.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.002 c