C# – handling activeX-events in ax 2009

activexaxaptacevents

i've got an activeX component with several events. debugging this dll in .net proofs, that the events are raised and can be breakpointed ( is this a word? 😉 )
registering this dll via regasm /codebase works and i can add this activeX in ax on a form. the events are listed in the activeX-explorer in ax.
but it seems, that i've got no chance to handle the events raised in ax.

using another activeX ( eg Microsoft Date and Time Picker Control ) works fine.

i appreciate any hints or tips!

here are some lines of the code, which i talk about.

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 );
}
}

these are the basic functions ( hope i didn't forget one of them ) relating to the event-thing.
the activeX itself is a wrapper for a com-object, which itself can't be integrated in ax, afaik.
"onEvent" is a function called by an event of the com-object and fires "myDelegate". all this is working fine, testing in visual studio – the event can be handled on a form, calling the activeX-part.
the last step would be to handle this event in ax.
as i already wrote, the event itself is listed correctly in the activeX-explorer, but i didn't find a way to react on this event in x++.

Best Answer

I assume your ActiveX is also written in .NET.

There are a couple of funnies when writing ActiveX controls in .NET. One of them is you need a separate interface for the events exposed by the ActiveX control. You will also need to manually raise the event in your control, when whatever conditions are met.

I answered a similar question about handling ActiveX events (written in C#) from Javascript. Maybe check out the ActiveX structure I posted there.

Related Topic