.NET控件的事件在Windows Embedded for POS上的COM中不起作用

时间:2009-08-05 21:15:13

标签: c# .net com vb6

我在.NET程序集中有一个InteropUserControl,可以在Windows XP和Windows 2000等其他操作系统中正常运行。我公司销售硬件和我们开发的软件,我们得到不同类型的一体化触摸屏工作站。 一些所有与Windows Embedded for Point of Sale一起安装的特定品牌都表现出一个奇怪的问题。

在InteropUserControl上,我以这种方式公开事件:

[ComVisible( true )]
[Guid( OrdCtl.EventsId )]
[InterfaceType( ComInterfaceType.InterfaceIsIDispatch )]
public interface __IControlEvents {
    [DispId( 1 )]
    void ItemSelected( int someid1, int someid2 );
}

事件委托和主要控制(包括提升事件)如下所示:

[ComVisible( false )]
public delegate void ItemSelectedEventHandler( int someid1, int someid2 );

[Guid( MyControl.ClassId )]
[ClassInterface( ClassInterfaceType.None )]
[ComSourceInterfaces( "MyInteropControl.__IControlEvents" )]
[ComClass( MyControl.ClassId, MyControl.InterfaceId, MyControl.EventsId )]
public partial class MyControl : UserControl, _IMyControl {
    public const string ClassId = "... guid ...";
    public const string InterfaceId = "... guid ...";
    public const string EventsId = "... guid ...";

    public event ItemSelectedEventHandler ItemSelected;

    void OnItemSelected( int someid1, int someid2 ) {
        var del = this.ItemSelected;

        if ( del != null ) {
            del( someid1, someid2 );
        }
    }

    ...
}

此控件用于VB6应用程序,其中的事件处理程序也是人们所期望的:

Private Sub MyControl_ItemSelected(ByVal someid1 As Long, ByVal someid2 As Long)
    'react to item selection event
End Sub

但是,在计算机上显示不正确的行为时,控件代码中的ItemSelected事件为null,因此无法引发。所以我知道什么时候它不起作用,而是可以使用解决方法。

该事件在Windows XP和Windows 2000上正常运行,使用.NET 2.0 Framework或.NET 3.5 Framework(项目目标为2.0)。我有一台XP机器演示了相同的行为,但它有一个不稳定的.NET 3.5安装。重新安装.NET修复了该机器。我认为这是原因,所以我决定重新安装有故障的机器。

在其中一台带有Embedded for POS的故障机器上,我运行了2.0设置(3.5不支持的操作系统)并选择了修复。这并没有解决问题。明天早上我打算尝试实际卸载并重新安装,只是为了确定。 这个操作系统的一些机器工作正常,有些则没有。我怀疑做这些机器设置的技术人员在最近一批机器上做了不同的事情。我给出的信息是错误的。我检查了自己,所有使用这个奇怪版本的Windows的机器都出现了同样的问题。

可能(甚至可能只是可能)的原因可能是因为没有通过COM可调用包装器正确“连接”事件而导致错误? 已添加:我如何才能将其用于Windows Embedded for Point of Sale?

我也在提出解决方法的建议,希望听到一个听起来不错的建议。

1 个答案:

答案 0 :(得分:0)

事实证明有一个Service Pack 3 for WEPOS。安装完成后,将安装.NET Framework 3.5。安装完成后,活动正常。

课程:确保所有内容都是最新的。