views:

213

answers:

2

hi folks,

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++.

A: 

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.

ParmesanCodice
unfortunately your explanation doesn't work - since i think the 600 characters for a comment don't suffice to write down some code-example, i'll do it via the follwoing answer!
Nico
@Nico Edit your question and put it there.
ParmesanCodice
A: 

removed, since edited initial question.

Nico