我有這個實驗室設備,連接到我的電腦。它使用特殊的OCX文件與設備進行通信(讀取,設置參數等)。我從手冊中得到了這個代碼,似乎正在工作。我收到一個消息框,指出「Magnification = 1272.814 Last error = API未初始化」。需要幫助將vbs代碼轉換爲jscript。我得到一個運行時錯誤類型不匹配
<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
或.GetLastError
方法或者以var value; var er;
或var value=""; var er="";
這裏一個類型不匹配錯誤是什麼API手冊有說
長GetLastError函數(VARIANT *錯誤)
[輸出]錯誤是錯誤字符串 與最後一個錯誤的錯誤代碼相關聯 備註:該調用將返回與上一個錯誤關聯的VT_BSTR VARIANT。返回 值:如果呼叫成功,則返回0.如果呼叫失敗,則從該函數返回代碼錯誤 。
長獲取(LPCTSTR lpszParam,VARIANT * VVALUE)
[IN] lpszParam是參數例如名稱「AP_MAG」
[輸入] [輸出] vValue是參數的值備註:該調用將獲得指定參數的 值並將其返回到vValue中。在調用此函數之前,在C++中, 必須將變量類型 (vValue.vt)指定爲VT_R4或VT_BSTR。如果沒有爲vValue定義變體類型 ,則對於模擬參數(AP_XXXX)和數字參數(DP_XXXX)的VT_BSTR,默認爲VT_R4 。如果對於模擬參數變量類型是VT_R4 ,則在該變體中返回的浮點表示是 。如果VT_BSTR變體通過,模擬量 值將作爲縮放後的字符串返回(例如 AP_WD將返回「= 10mm」)。對於數字參數,VT_R4變體 產生狀態編號並且VT_BSTR變體導致狀態字符串 (例如,DP_RUNUPSTATE將返回狀態0或「關機」或相當於支持的語言的 )。使用SDK呼叫 :: SysFreeString(vValue.bstrVal)
所以基本上它是OCX文件的作者很糟糕,而不是乾淨的方式來傳遞新的變量值,就像在我的情況下'value = Api1.Get(「AP_MAG」);'他們做了他們做的事情沒有。 – Alex 2013-03-08 19:43:49
問題是我試圖在自定義環境中構建WSH的ontop頂部運行我的腳本。有很多已經用Jscript編寫的自定義函數,我計劃用於自己的函數的部分代碼也在JS中。充其量,我不得不重寫VBS中的一些代碼,但在VBS中調用JS函數是我理解的另一個故事。 – Alex 2013-03-08 19:52:51
這不是由於OCX的作者,許多語言支持和使用「by-ref」params,但只是一個JS語言的限制,你不能做任何事情。 – 2013-03-08 20:05:31