我有这个连接到我的电脑的实验室设备。它使用特殊的 OCX 文件与设备进行通信(读取、设置参数等)。我从手册中得到了这段代码,似乎可以正常工作。我收到一个消息框,上面写着“放大率 =1272.814 最后一个错误 = API 未初始化”。
<HTML>
<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub window_onLoad()
Dim Value
Dim er
call Api1.Initialise("")
call Api1.Get("AP_MAG",Value)
call Api1.GetLastError(er)
call window.alert("Magnification = " + CStr(Value)+"Last error="+er)
call Api1.ClosingControl()
end sub
-->
</SCRIPT>
<TITLE>New Page</TITLE>
</HEAD>
<BODY>
<object classid="CLSID:71BD42C4-EBD3-11D0-AB3A-444553540000" id="Api1">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="2096">
<PARAM NAME="_ExtentY" VALUE="1058">
<PARAM NAME="_StockProps" VALUE="0">
</OBJECT>
</BODY>
</HTML>
因此,因为我在 vbs 中的知识为 0%,在 jscript 中的知识约为 10%,所以我试图用 Javascript 重写相同的东西。而且我还有一些已经用js编写的必要代码。
<script language="JScript">
var Api1=new ActiveXObject("ApiCtrl");
var value;
var er;
Api1.Initialise("");
Api1.Get("AP_MAG",value);
Api1.GetLastError(er);
window.alert("Magnification = " + value+"\n Last error="+er);
Api1.ClosingControl();
</script>
.Get
不幸的是,我在使用or的.GetLastError
方法中遇到类型不匹配var value; var er;
错误var value=""; var er="";
这是 API 手册必须说的
长 GetLastError(VARIANT* 错误)
[out] Error 是与最后一个错误的错误代码关联的错误字符串 备注:此调用将返回与最后一个错误关联的 VT_BSTR VARIANT。返回值:如果调用成功,则返回0。如果调用失败,则函数返回错误码。
长获取(LPCTSTR lpszParam,VARIANT* vValue)
[in] lpszParam 是参数的名称,例如“AP_MAG”<br> [in][out] vValue 是参数的值 备注:本次调用将获取指定参数的值并在 vValue 中返回。在 C++ 中,在调用此函数之前,您必须将变体类型 (vValue.vt) 指定为 VT_R4 或 VT_BSTR。如果没有为 vValue 定义变量类型,则默认为模拟参数 (AP_XXXX) 的 VT_R4 和数字参数 (DP_XXXX) 的 VT_BSTR。如果变体类型是模拟参数的 VT_R4,则在变体中返回浮点表示。如果传递了 VT_BSTR 变量,则模拟值将作为带有单位的缩放字符串返回(例如,AP_WD 将返回“= 10mm”)。对于数字参数,VT_R4 变体产生一个状态编号,VT_BSTR 变体产生一个状态字符串(例如,DP_RUNUPSTATE 将返回状态 0 或“Shutdown”或受支持语言中的等效项)。在 C++ 中,如果变体类型指定为 VT_BSTR,则 API 将在内部分配一个 BSTR,调用者必须使用 SDK 调用 ::SysFreeString (vValue.bstrVal) 取消分配该 BSTR