注册方法
此方法将 DLL 导出的函数注册为 DWX 对象的方法。由该函数的名称或序号来标识。备注中解释了 "i="、"r=" 和 "f=" 的含义。按函数名注册
DWX = new ActiveXObject("DynamicWrapperX");
DWX.Register("user32.dll", "MessageBoxW", "i=hwwu", "r=l");
res = DWX.MessageBoxW(0, "Hello, world!", "Test", 4); // 调用.
按函数别名注册
DWX.Register("user32:BadName", "GoodName", "r=n", "f=t"); // BadName 可能是包含字符的函数名称 // 方法在名称中不允许出现的情况,或者只是名称太长了。按函数序号注册
DWX.Register("user32:110", "MethodName", "i=p", "r=l"); DWX.Register("user32:0x6E", "MethodName", "i=p", "r=l");备注:
- 如果库文件的扩展名为 ".dll",则扩展名是可选的。如果文件没有扩展名,则应在其名称后加一个点。例如,"mylib."。
- 系统 DLL 可以在没有路径的情况下被搜索到。对于其他 DLL 将取决于他们的位置。
- 具有字符串参数或返回值的 Windows API 函数通常以两种变体形式存在。例如,用于 Unicode 字符串的 MessageBoxW 和用于 ANSI 的 MessageBoxA。名称中的 "A" 可以省略,因为如果找不到 MessageBox,DWX 会自动添加它,但 "W" 不能省略。
- 序号可以是十进制或十六进制。请记住,不同版本的 DLL 之间、以及在同一版本的 x86 和 x64 之间序号不能保证相同。
- 带有前缀 "i="、"r=" 和 "f=" 的参数可能存在,也可能不存在,具体取决于函数,并且它们的顺序是任意的,因为它们由前缀区分。
- "i=" 后面的字母定义函数参数的类型(整数、浮点数、字符串等),你可以在这里看到参数是什么类型。只有当函数没有设计输入参数时,才能省略 "i=" 参数。
- "r=" 指定返回值的类型。无论函数是否有返回值,都可以省略它。
- 参数 "f=" 的指定将影响到函数调用的方式。目前有两个标志被识别:"t" 表示函数的调用约定是 "thiscall","l"(最后一个错误)表示必须在调用注册函数后立即调用 GetLastError API。您可以使用 LastError 方法查看它的错误代码。"t" 标志仅在 32 位版本的 DWX 中有效,而 64 位版本已被忽略。
译者注:目前,JScript 语言中 ActiveXObject 对象创建仅有 IE 浏览器支持,其他现代浏览器如谷歌、火狐、苹果均未实现,因为非常不安全。试想,如果一个网页或一封邮件通过脚本代码创建 ActiveX 对象,获取了终端机器内存和磁盘的控制权,那将是一件十分危险的事情。所以,IE 浏览器也对 ActiveX 创建对象功能做出了严格的限制和提醒,而且该功能处于默认关闭状态。
因此,DWX 在 vbs 脚本中,或者其他胶水型语言(如 Python、lisp 等,尤其是 AutoLisp —— 作为 Lisp 的子集已经停止开发)中可以发挥更大的作用。
因此,DWX 在 vbs 脚本中,或者其他胶水型语言(如 Python、lisp 等,尤其是 AutoLisp —— 作为 Lisp 的子集已经停止开发)中可以发挥更大的作用。