我有一个包含多个事件的activeX组件。在.net样张中调试这个dll,事件被引发并且可以被破坏点(这是一个字吗?;)) 通过regasm / codebase注册这个dll工作,我可以在表单上的ax中添加这个activeX。事件在ax中的activeX-explorer中列出。 但似乎我没有机会处理在ax中提出的事件。
使用另一个activeX(例如Microsoft Date和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-object的包装器,它本身不能集成在ax,afaik中。 “onEvent”是一个由com-object事件调用的函数,并触发“myDelegate”。这一切都运行正常,在visual studio中测试 - 事件可以在表单上处理,调用activeX-part。 最后一步是用ax处理这个事件。 正如我已经写过的那样,事件本身在activeX-explorer中正确列出,但是我没有找到一种方法来对x ++中的这个事件作出反应。
答案 0 :(得分:0)
我假设您的ActiveX也是用.NET编写的。
在.NET中编写ActiveX控件时有几个好玩的东西。其中之一是您需要为ActiveX控件公开的事件提供单独的接口。当满足任何条件时,您还需要在控件中手动引发事件。
我回答了关于handling ActiveX events (written in C#) from Javascript的类似问题。也许看看我在那里发布的ActiveX结构。