2014-02-10 3 views
0

Прошу прощения за это (так долго) название, но мне нужно было заполнить все соответствующие темы там, чтобы лучше прояснить мой пост ,Компонент .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.

+0

Вы должны разместить некоторый код, небольшой, но соответствующий фрагмент. – Noseratio

+0

Да, ваше право, извините. Полагаю, я этого не сделал, потому что может быть, я ожидал какого-то очевидного ответа вроде «Да, .NET COM-компоненты не работают с JavaScript в .NET Framework 4.5.1» ..;) Теперь код находится в моем сообщении. – Doming

+0

У 'IComEvents' есть' [ComVisible (true)] '? Кроме того, я не вижу '' [ComDefaultInterface] 'на' NPlayer', у вас есть? – Noseratio

ответ

0

Я разрешил свою проблему, и я хотел бы написать здесь, потому что мой анализ был неправильным, поэтому название проблемы не соответствует моей реальной проблеме!

Мой надзор пришел с фактом, что я использую компонент .NET COM, и ошибка приложения была воспроизведена, когда я обновил версию .NET Framework до 4.5.1.

Я думал, что проблема связана с кодом C#, но реальная проблема связана с кодом GWT (JavaScript). После получения события из компонента .NET COM мой код вызывает какой-то другой код JavaScript для распространения события на стороне интерфейса, и там я нашел плохое использование областей в JavaScript, появившихся с новой версией. NET Framework! Ну, это не предмет этого сообщения, поэтому я не буду продолжать это объяснение.

Подводя итог, все было в порядке с интерфейсом ISDispatch и, кроме того, моя проблема была решена ...;)

Спасибо Noseratio за вашу помощь!

Doming.

Смежные вопросы