c# - 使用 NUnit+Reflection,在我的 ActiveX 控件上找不到任何事件

标签 c# event-handling activex system.reflection

我正在使用 NUnit 和 C# 对老式 COM/ActiveX 控件进行单元测试。 我正在动态地做所有事情,没有引用或编译时类型信息,因为我正在测试的控件主要来自 javascript - 当然,它会动态地做所有事情。我想连接一些事件处理程序并确保正确触发事件,但我无法找到这些事件!我使用 System.Activator.CreateInstance 动态构建控件的实例,如下所示(省略了一些细节;-):

Type T = Type.GetTypeFromCLSID(guid);
eztwain = System.Activator.CreateInstance(T);
EZTwainX = eztwain.GetType();

属性和方法的测试工作正常,像这样:

EZTwainX.InvokeMember("Clear", BindingFlags.InvokeMethod, null, eztwain, null);
Assert.AreEqual(0, (int)EZTwainX.InvokeMember("ImageCount", BindingFlags.GetProperty, null, eztwain, null), "ImageCount");

以下全部失败,返回 null 或空数组或抛出“找不到名称”异常:

EZTwainX.GetEvent("AcquireDone");           // returns null
EZTwainX.GetEvents();                       // returns empty array
EZTwainX.GetEvents(BindingFlags.Public |    // returns empty array
            BindingFlags.NonPublic |
            BindingFlags.Static | BindingFlags.Instance);
PropertyInfo propertyInfo = EZTwainX.GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);      // returns null
MemberInfo[] mimfo = EZTwainX.GetMember("AcquireDone", MemberTypes.Event, BindingFlags.Public | BindingFlags.NonPublic);      // returns empty array

我只是假设(咳咳)我可以使用 Reflection API 做一些事情,相当于:

eztwain.AcquireDone += <event handler>;

但我不知道那个等效的东西是什么。 编辑:我相信该控件上的那个事件,因为在 Javascript 中这有效(并捕获事件):

eztwain.attachEvent("AcquireDone", function() { me.onAcquireDone(); });

最佳答案

看看How to: Handle Events Raised by a COM Source

另外,请注意您可以使用 ( Ildasm.exe (IL Disassembler)) 获取事件签名的实用程序。

关于c# - 使用 NUnit+Reflection,在我的 ActiveX 控件上找不到任何事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9009069/

相关文章:

c# - asp.net mvc highchart 折线图 json

c++ - 如何为 wxGrid 单元格创建复选框更改事件

asp.net - 事件处理后如何更新页面数据?

javascript - jQuery 检测元素内部的 mousedown,然后在元素外部检测 mouseup

C# 通用比较方法 [C++ 模板的模拟]

c# - 使用 ChannelFactory 在没有服务引用的情况下调用异步 WCF

c# - "ignoring"P/Invoke 在 Mono 上运行时

c# - ActiveX 控件更新

vb6 - OleControl 实例化为错误类型 - 仅在 Reg Free COM 中使用时?

c++ - OCX AfxOleRegisterTypeLib失败,错误0x80040200