Прошу прощения за это (так долго) название, но мне нужно было заполнить все соответствующие темы там, чтобы лучше прояснить мой пост ,Компонент .NET COM с интерфейсом ISDispatch не работает с IE10 JavaScript с установленной .NET Framework 4.5.1
Дело в том, что, как говорится в названии, у меня есть работающее приложение, которое использует COM-компонент .NET (C#), доступный из Internet Explorer с помощью JavaScript с использованием позднего связывания. Компонент .NET COM экспортирует интерфейс InterfaceIsDispatch, чтобы иметь некоторые события, которые выбрасываются из компонента в мир JavaScript, среди другого интерфейса для доступа к компоненту из JavaScript.
приложение было отлично работает с этой средой:
- Составитель и развернуты с Visual Studio 2010 и установки MSI.
- . NET Framework 4.0.
- Internet Explorer 10
проблема появилась, когда моя машина была обновлена .NET Framework 4.5.1. События , как правило, получены из интерфейса IsDispatch, имеют остановлены для работы.
Здесь я пишу задействуемый код (ничего особенного, обычный способ подвергать .NET-код COM).
Класс, который будет COM зарегистрирован:
[Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")]
[ProgId("NPlayer")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(IComEvents))]
public partial class NPlayer : UserControl, IExposedMembers, IObjectSafety
{
[...]
}
Способ изготовления InterfaceIsDispatch:
[Guid("YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IComEvents
{
[...]
[DispId(4)]
void CloseEvent();
[...]
}
Способ отправки CloseEvent события:
[...]
[ComVisible(false)]
public delegate void CloseEventHandler();
public event CloseEventHandler CloseEvent;
[...]
if (CloseEvent != null)
CloseEvent();
[...]
Путь получения COM-событий из JavaScript (на самом деле JavaScript встроен в интерфейс GWT, но я использовать обычно работают на жидком фиктивный HTML код для simplyfing тестов):
<body>
[...]
<object id="NPlayer" name="NPlayer" classid="CLSID:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
codebase="NPlayerDeployer.cab#version=5,1,5,0" width="0" height="0">/object>
[...]
<script for="NPlayer" event="CloseEvent()" language="javascript">
alert("CloseEvent received!")
</script>
[...]
</body>
Любой знает, какую-то информацию об этой проблеме? Googling для решения не дал мне никаких результатов. Я сейчас пытаюсь перейти на Visual Studio 2013 (который поддерживает .NET Framework 4.5 и 4.5.1), но результаты еще хуже, Internet Explorer 10 сработает с новым развертыванием (я полагаю, это еще одно сообщение).
Пожалуйста, помогите с оценкой.
С наилучшими пожеланиями,
Domingo.
Вы должны разместить некоторый код, небольшой, но соответствующий фрагмент. – Noseratio
Да, ваше право, извините. Полагаю, я этого не сделал, потому что может быть, я ожидал какого-то очевидного ответа вроде «Да, .NET COM-компоненты не работают с JavaScript в .NET Framework 4.5.1» ..;) Теперь код находится в моем сообщении. – Doming
У 'IComEvents' есть' [ComVisible (true)] '? Кроме того, я не вижу '' [ComDefaultInterface] 'на' NPlayer', у вас есть? – Noseratio