0

У меня есть стандарт Form с только AxWMPLib.AxWindowsMediaPlayer и без кода, кроме автогенерированного. Я получаю System.ArgumentException дважды при каждом запуске приложения. В нем говорится, что объект не предоставляет интерфейс IPropertyNotifySink. Но как его реализовать, поскольку у меня нет пространства имен, которое содержит его (Microsoft.VisualStudio.OLE.Interop)? И что мне делать в реализованных функциях (OnChanged(Int32) и OnRequestEdit(Int32))?System.ArgumentException при установке AxWMPLib.AxWindowsMediaPlayer в форме

+0

Вы изменили какие-либо свойства, или вы только что добавили компонент и отлаживали? –

+0

@VisualVincent Просто добавил компонент, не более того. – JustLogin

+0

Странно, какая ОС вы используете? –

ответ

1

Это нормальный случай. Хороший объект ActiveX должен реализовывать интерфейс IPropertyNotifySink (неуправляемый COM-интерфейс), но от этого не требуется. Класс-оболочка AxHost просто слепо предполагает, что делает, поэтому пытается подписаться на нее, но внутренний конструктор ConnectionContainer обнаруживает, что это не так.

Что не фатальным, так как реализующий интерфейс не является обязательным, AxHost вызывает конструктор с аргументом throwException значение ЛОЖЬ. Таким образом, вы видите исключение первого шанса, поднятое в отладчике, но затем оно снова ловит его и возвращается. Fwiw, этот код можно было бы очень легко написать, чтобы вы вообще не увидели исключение, но программист Microsoft сделал ярлык с обработчиком исключений catch-em-all. Просто раздражает, вот и все.

Определенно не Ваша задача реализовать интерфейс, это задача управления. Поэтому попытка реализовать OnChanged() и OnRequestEdit() не имеет смысла.

Просто держите автомобиль, у вас нет настоящей проблемы.

+0

И для чего был создан этот интерфейс? – JustLogin

+1

Чтобы позволить хосту ActiveX сообщать об изменениях свойств запаса, которые имеют поведение окружающей среды. Свойство Font будет стандартным примером, в качестве элемента управления обычно используется тот же шрифт, что и его родительский элемент. BackColor - еще один. Не относится к WMP, это не тот тип управления, который ведет себя так же, как те, которые вы находите в панели инструментов WPF или Winforms. –