2012-10-23 43 views
0

我一直在寻找这个永远,一直没能找到答案,所以任何帮助将不胜感激!vb.net参考大会WithEvents不工作

我原本是通过.asp页面使用这个dll作为一个activeX控件,它完美地工作。我现在不得不重写它作为一个班,因为我的老板也问我。所以在我的项目中,我右键单击并添加了引用name.dll。这是文件类型是大会。

,所以我创建了一个变量

Friend WithEvents scan As name.Integration.ActiveX.ActiveXObject

有了这个我可以调用它的方法和它在这一点上完美的作品。但是,在我调用某个方法后,它将运行一个进程并开始等待卡插入扫描器。当一张卡片插入扫描仪时,它假设抛出一个事件,然后开始扫描。

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

+0

是使用“手柄扫描”的功能吗? – UnhandledExcepSean

+0

这几乎总是需要一个消息循环。您从Winforms或WPF应用程序获得的种类。 Application.Run()是必需的。 –

+0

我从来没有使用过WPF,但我知道有一个我称之为启动软件的函数。它被称为Initialize。一旦我这样做,软件就会根据需要开始收听和发射事件。 – Godrules500

回答

0

如果我正确地理解了你(并且我正在阅读这两行之间的内容),那么你有来自第三方的ActiveX控件。您之前的网页使用此控件。您现在改为引用包含ActiveX控件的dll,以便VS自动创建一个围绕ActiveX组件的.net包装器。那是对的吗?

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

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

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

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

+0

是的ActiveX文件是第三方。现在,如果filetype表示它是一个汇编文件,那么它有关系吗? 另外一个互操作版本不存在。唯一存在的文件是name.integration.ActiveX。这是我必须下载的唯一文件。我应该可能使用Windows窗体并在那里拖动activeX文件,或者是因为它们是隐藏的,它们将永远不会调用我的事件处理程序? – Godrules500

+0

这很奇怪,当我做整个WithEvents时,我得到了事件OnSchemeComplete。但是当我在.net Reflector中搜索它时,它被称为schemeComplete。我应该看看我是否可以找出如何捕捉SchemeComplete? – Godrules500

+0

当然我不熟悉你的控制。通常我会期望名为“OnSchemeComplete”的东西是基类的可重写方法,而不是事件。它可能会帮助,如果你可以提供相关的代码... – Adventure