1

我有一个带有多个事件的 activeX 组件。在 .net 证明中调试这个 dll,事件被引发并且可以断点(这是一个词吗?;))通过 regasm /codebase 注册这个 dll 工作,我可以在表单上的 ax 中添加这个 activeX。事件列在 ax 中的 activeX-explorer 中。但似乎,我没有机会处理 ax 中引发的事件。

使用另一个activeX(例如Microsoft Date and Time Picker Control)可以正常工作。

我感谢任何提示或提示!

这里有一些代码行,我正在谈论。

namespace <someNamespace>
{
    [ProgId("<someProgID>")]
    [ClassInterface(ClassInterfaceType.AutoDual), ComSourceInterfaces(typeof( <myInterface> ))]
    [Guid("<someGUID>")]
    [ComVisible(true)]

    public class <ClassName>
    {

        [instantiate some COM-Object, named dummy]

        public 
        <ClassName>( ...)
        {
            init();
        }

        public delegate void <someDelegate>( int a, int b );
        public event someDelegate myDelegate;

        [ComVisible(true)]
        public void OnEvent( int a, int b )
        {
            if ( myDelegate != null )
            {
                Console.WriteLine( "yippie" );
            }
        }

        [ComVisible(true)]
        public void run( ... )
        {
            this.myDelegate += new someDelegate( this.OnEvent );
        }

        private void
        onEvent( int a, int b )
        {
             myDelegate( a, b );
        }

        #endregion
    }
}

[Guid("<someOtherGUID>")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface <myInterface>
{
    [DispId(1)]
    void myDelegate( int a, int b );
}
}

这些是与事件相关的基本功能(希望我没有忘记其中之一)。activeX 本身是一个 com 对象的包装器,它本身不能集成到 ax 中,afaik。"onEvent" 是一个由 com 对象的事件调用的函数并触发 "myDelegate"。这一切工作正常,在 Visual Studio 中进行测试 - 可以在表单上处理事件,调用 activeX-part。最后一步是在 ax.xml 中处理此事件。正如我已经写的那样,事件本身在activeX-explorer中正确列出,但我没有找到在x++中对此事件做出反应的方法。

4

1 回答 1

0

我假设您的 ActiveX 也是用 .NET 编写的。

在 .NET 中编写 ActiveX 控件时有几个有趣的地方。其中之一是您需要为 ActiveX 控件公开的事件提供单独的接口。当满足任何条件时,您还需要在您的控件中手动引发事件。

我回答了一个关于从 Javascript 处理 ActiveX 事件(用 C# 编写)的类似问题。也许看看我在那里发布的 ActiveX 结构。

于 2009-12-15T09:50:08.457 回答