Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1285868805
ProgRAMmer Dimonych
2010-09-30 21:46
2018.04.22
Метафайлы тормозят при ресайзе


2-1461353048
BondFx
2016-04-22 22:24
2018.04.22
MD5


15-1471959711
Игорь Шевченко
2016-08-23 16:41
2018.04.22
Раздается Delphi 10.1 starter edition


15-1470208803
Юрий Зотов
2016-08-03 10:20
2018.04.22
Разновидность шахмат


2-1461311382
istok20
2016-04-22 10:49
2018.04.22
массив из oleacc.IAccessible через TList





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский