AIMP Forum
AIMP for PC => Дополнения / Addons => Разработка / Development => Topic started by: DarkDrawKill on April 26, 2026, 13:27:49
-
При попытке за-ап-кастить объект класса наследующий IUnknown несколько раз происходит ошибка IUnknown is ambiguous class of ...
такое может произойти например когда класс прослойка для формы окна наследует несколько ивенктов или база данных фонотеки наследует провайдер (по документации она обязана это сделать)
как решить данную задачу я не нашёл кроме как указание наследования виртуальным
class ...: public virtual IUnknown
{
}
но я не уверен в работоспособности потому что возможно он меняет виртуальную таблицу
пз в apiPlaylists старые определения констант
-
При попытке за-ап-кастить объект класса наследующий IUnknown несколько раз происходит ошибка IUnknown is ambitious class of ...
такое может произойти например когда класс прослойка для формы окна наследует несколько ивенктов или база данных фонотеки наследует провайдер (по документации она обязана это сделать)
как решить данную задачу я не нашёл кроме как указание наследования виртуальным
IUnknown реализуется базовым классом прослойкой, что идёт вместе с SDK. Вам не надо его реализовывать самостоятельно.
пз в apiPlaylists старые определения констант
Поправил
-
IUnknown реализуется базовым классом прослойкой, что идёт вместе с SDK. Вам не надо его реализовывать самостоятельно.
Проблема не в IUnknownImpl а в самом IUnknown который наследуется несколько раз из-за чего происходит ошибка
class MyMusicLibrary: public IUnknownImpl<IAIMPMLExtensionDataStorage>,
public IAIMPMLDataProvaider
{
/* ... */
}
если за-ап-кастить объект данного класса в IUnknown произойдёт ошибка (ээто нужно чтобы передать его в IAIMPCore->RegisterExtension)
потому что оба IAIMPMLExtensionDataStorage и IAIMPMLDataProvaider наследуют IUnknown
-
а в самом IUnknown который наследуется несколько раз
Откуда он наследуется-то? Это от него все наследуются.
если за-ап-кастить объект данного класса в IUnknown
Вообще говоря, кастить объекты к интерфейсам нельзя. Нужно использовать QueryInterface.
-
Вообще говоря, кастить объекты к интерфейсам нельзя. Нужно использовать QueryInterface
так внутри QueryInteface тоже идёт неявный апкаст типов
гзв жалуется что QueryInterface является 'ambiguous' потому что он принадлежит IUnknown
-
В плюсах я не силён, не подскажу, как правильно решать такие ситуации.
Вот исходники довольно навороченного плагина на С++ для AIMP:
https://github.com/kubik-jaroslav/AIMPYouTube/blob/master/OptionsDialog.h
-
Вот исходники довольно навороченного плагина на С++ для AIMP:
https://github.com/kubik-jaroslav/AIMPYouTube/blob/master/OptionsDialog.h
костыль так костыль
но с виртуальным наследованием я поэкспериментирую
-
В смысле костыль? А как у майкрософта разруливаются подобные ситуации? Ведь тут за основу взята Com-модель.
-
В смысле костыль? А как у майкрософта разруливаются подобные ситуации? Ведь тут за основу взята Com-модель.
я не знаю поэтому здесь и спросил
костыль потому что приходится перелопачивать методы IUnknown даже если это уже сделал IUnknownImpl
гзв нашёл данную статью (https://learn.microsoft.com/ru-ru/windows/win32/com/aggregation)
если буквально это тоже самое что и сервисы которые берутся из ядра используя QueryInterface
-
я не знаю поэтому здесь и спросил
Увы, я на C++ не пишу, не могу подсказать.