【问题标题】:Legacy activeX control calls DLL functions - I need help旧版 activeX 控件调用 DLL 函数 - 我需要帮助
【发布时间】:2010-09-01 01:17:41
【问题描述】:

提示:这听起来可能很复杂,因为我试图提供尽可能多的信息,但我怀疑我只是希望有人告诉我“是的,你是对的”。

在这个可以追溯到 2002 年的遗留系统上,用户访问网页并使用 RFID 阅读器读取标签号,然后将其写入网页上的输入字段。

阅读器附带的唯一软件是自定义 DLL,nop .exe。

非常稀少的文档坚持只使用 MSIE,并且禁用与 ActiveX 相关的所有安全性。

当我查看网页的源代码时,我看到了对 DLL 中函数的调用。

现在,有趣的部分来了:我知道 ActiveX,我必须对 DLL 做一个小改动*但是* VB6 源代码已经丢失,所以我想我有本周从头开始重新创建(看似非常简单的)DLL。

反编译 DLL 向我展示了函数(locateReader、getTagVal、closeReader)。但是,通过反编译,我无法真正知道参数的数量或类型,也无法知道返回值......如果有人知道他们拒绝分享的 API,但基本上这一切似乎都迷失了随着公司破产、被买卖、合并和分拆,最初的 DLL 可能是由外部人员编写的,但没有人知道是谁。

那么,我可以从 ASP 页面源中获取函数参数和类型吗?

我看到类似的东西

Reader = new ActiveXObject("<dllName>.Reader");
Reader.locateReader();
tagVal = Reader.getTagVal();
Reader.closeReader();

所以,我想说 fn() 没有一个带参数,closeReader 不必返回任何东西;看起来locateReader也没有返回任何东西,所以我猜错误处理必须在DLL中(永远循环,弹出一个要求附加阅读器的弹出窗口;getTagVal似乎返回一个字符串。

这听起来对吗?任何其他 cmet(除了要学习的课程)?

【问题讨论】:

    标签: asp.net vb.net dll activex


    【解决方案1】:

    您在此处放置的“代码”看起来像是对设备的直接调用。 getTagVal() 似乎获得了 RFID 价值?由于这是一个 COM (Active X) 调用,您可以在一个简单的 .net 程序中调用它,看看您是否可以访问阅读器?如果可以,那么您可以将现有功能包装在包装器中。

    您需要尝试从组件生成 TLB:

    So, if you only have a COM dll, you need to get an idl-file from it:

    1. Visual Studio,启动它并转到菜单工具->OLE/COM 对象查看器。 这叫做oleview.exe,也可以从windows sdk中获取

    2. 在该应用程序中,选择菜单 File->View Typelib..

    3. 选择 COM dll,您将看到 Typelib。

    4. 选择菜单文件->另存为。用适当的名称保存它。为了 例如“mycom.idl”

    5. 以 idl-filname 作为参数启动 midl.exe 或 mktyplib.exe。 “中 mycom.idl"

    阅读 MSDN 了解有关 midl 和 mktyplib

    【讨论】:

    • 感谢您的全面回答。我会立即尝试并回复您。
    • 实际上,在 VB Express 中,我没有看到选项 Tools->OLE/COM Object Viewer :-(
    猜你喜欢
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多