0

我一直在寻找这个并且一直无法找到答案,所以任何帮助将不胜感激!

我最初通过 .asp 页面将此 dll 用作 activeX 控件,并且它运行良好。我现在不得不重写它作为一个班级,因为我的老板也问过我。所以在我的项目中,我右键单击并添加了引用 name.dll。这个文件类型是程序集。

所以我创建了一个变量

Friend WithEvents scan As name.Integration.ActiveX.ActiveXObject

有了这个,我可以调用它的方法,并且在这一点上它工作得很好。但是,在我调用一个方法后,它会运行一个进程并开始等待将卡插入扫描仪。当卡片插入扫描仪时,它会抛出一个事件然后开始扫描。

一旦我插入一张卡片,它就会扫描,但我遇到的问题是我的程序没有捕捉到它抛出的 50 个事件中的任何一个。有谁知道如何或为什么?我迫切需要解决这个问题。

4

1 回答 1

0

如果我对您的理解正确(并且我在此处的字里行间阅读),您就拥有来自第三方的 ActiveX 控件。您之前的网页使用了此控件。您现在改为引用包含 ActiveX 控件的 dll,因此 VS 会自动在 ActiveX 组件周围创建一个 .net 包装器。那是对的吗?

如果是,请确认您从正确的库中引用了正确的类型。

  1. 使用对象浏览器查看 dll 的类型。我想你会发现你有两个与 dll 关联的库。例如,假设您的库被命名为“第三方”。您可能会看到“AxThirdParty”以及“Interop.ThirdParty”。“互操作”库包含大多数类。但是,“Ax...”库是处理事件的关键。您声明事件的对象来自此库。如果您没有看到这个库,您可能需要将控件添加到 Windows .net 表单以让 VS 为您创建它。

  2. 不要尝试处理“Ax...”库中隐藏的事件。请注意,处理隐藏事件不会导致编译错误,但也不会引发它们。您是否在“Ax...”库中看到您尝试处理的事件?如果是这样,它是否以浅灰色显示?请注意,VS 将重命名与标准控制事件冲突的任何互操作事件。例如,ActiveX 控件的单击事件被命名为“ClickEvent”,它是您要处理的 ClickEvent 事件,而不是 Click 事件。

请注意,以上适用于 Windows 窗体。我认为 Hans 对消息循环的看法是正确的。

于 2012-10-23T17:59:55.317 回答