Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2015, 10:04   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию Delphi освобождение массива IMoniker

Здравствуйте.
Есть массив AudioMonikers : array of IMoniker и процедура, которая его заполняет:
Код:
function getAudioRenderers: Integer;
var
  res : HRESULT;
  pMoniker : IMoniker;
  s : string;
  DeviceName:OleVariant;
  PropertyName:IPropertyBag;
  pDevEnum:ICreateDEvEnum;
  pEnum:IEnumMoniker;
begin
  pDevEnum := nil;
  pEnum := nil;
  PropertyName := nil;
  Result := 0;

  Res:=CoCreateInstance(CLSID_SystemDeviceEnum, NIL, CLSCTX_INPROC_SERVER,
IID_ICreateDevEnum, pDevEnum);
  case res of
    REGDB_E_CLASSNOTREG : s := 'REGDB_E_CLASSNOTREG';
    CLASS_E_NOAGGREGATION: S := 'CLASS_E_NOAGGREGATION';
    E_NOINTERFACE: S := 'E_NOINTERFACE';
    E_POINTER: S := 'E_POINTER';
  end;
if Res<>S_OK then EXIT;

Res:=pDevEnum.CreateClassEnumerator(CLSID_AudioRendererCategory, pEnum, 0);
if res<>S_OK then EXIT;
setlength(AudioMonikers,0);
while (S_OK=pEnum.Next(1,pMoniker,Nil)) do
begin
setlength(AudioMonikers,length(AudioMonikers)+1);
AudioMonikers[length(AudioMonikers)-1]:=pMoniker;
Res:=pMoniker.BindToStorage(NIL, NIL, IPropertyBag, PropertyName);
if FAILED(Res) then Continue;
Res:=PropertyName.Read('FriendlyName', DeviceName, NIL);
if FAILED(Res) then Continue;
s := DeviceName;
cbox_AddItem(cbox_AudioRenderer,s);
Inc(Result);
end;
  DeviceName := '';
  pMoniker := nil;
  PropertyName := nil;
  penum := nil;
  pDevEnum := nil;
end;
Как правильно освободить моникеры в массиве и очистить массив?
BLACK_RAIN вне форума Ответить с цитированием
Старый 07.03.2015, 10:18   #2
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

почему массив? возьмите любой подходящий лист
и код у вас странноватый
lomastr_ вне форума Ответить с цитированием
Старый 07.03.2015, 15:43   #3
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
почему массив? возьмите любой подходящий лист
и код у вас странноватый
Что за лист? Где еще можно держать моникеры, если не в массиве?
И в каком месте странноватый?
BLACK_RAIN вне форума Ответить с цитированием
Старый 07.03.2015, 16:11   #4
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

Цитата:
Что за лист? Где еще можно держать моникеры, если не в массиве?
да где угодно, например TList<>
Цитата:
И в каком месте странноватый?
везде, что за кейс? добавляете в массив а потом смотрите надо ли добавлять в комбобокс, концовка не понятная ..
lomastr_ вне форума Ответить с цитированием
Старый 08.03.2015, 07:04   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,770
По умолчанию

Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
Что за лист? Где еще можно держать моникеры, если не в массиве?
В TInterfaceList.
Vapaamies вне форума Ответить с цитированием
Старый 08.03.2015, 12:33   #6
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
В TInterfaceList.
Код:
il := TInterfaceList.Create;
il.Add(pmoniker);
(il.Items[0] as imoniker).GetClassID(guid);
MessageBox(0,PChar(GUIDToString(guid)),'',0);
il.Free;
Типа так? В конце просто убить лист и не надо освобождать каждый моникер?
BLACK_RAIN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Освобождение памяти Smolya Общие вопросы C/C++ 4 23.02.2015 19:38
Произведение элементов массива в функции (передача массива в функцию) (Delphi) Toxa16 Помощь студентам 1 23.04.2011 04:42
Освобождение Панели (Delphi) Dalagardi Помощь студентам 1 28.03.2010 17:37
Освобождение памяти PUH Помощь студентам 1 22.11.2009 17:14
Освобождение динамического массива? VintProg Общие вопросы Delphi 15 28.08.2009 10:41