2014-11-06 36 views
3
Set args = WScript.Arguments 

dim rec 

rec = args.Item(1)&" "&args.Item(2) 

return rec 

我寫了上面這個簡單的VBScript,然後當我試圖從Java調用此代碼...得到一個類型不匹配錯誤在VBScript

import java.io.*; 

class RuntimeDemo{ 

    public static void main(String[] args) { 

     Process p=null; 

    try { 

    p=Runtime.getRuntime().exec("wscript D:/AS/VBScripts/Sample1.vbs " + args[0] +" " + args[1] + " " + args[2]); 

    } 
    catch(IOException e) { 

     System.out.println(e); 

     System.exit(0); 
    } 
    p.waitFor(); 

    InputStream in = p.getInputStream(); 

    for (int i = 0; i < in.available(); i++) { 

       System.out.println("" + in.read()); 

我得到一個錯誤"Type mismatch 'return'"。這究竟是從哪裏來的,什麼是正確的解決方案?

回答

3

您的錯誤可能來自嘗試將「返回」設置爲值。 VBScript不支持「返回」。如果你想從一個函數返回一個值,你會建造它,像這樣:

function GetParams() 
    dim wsh, args, rec 
    set wsh = CreateObject("WScript.Shell") 
    set args = wscript.arguments 
    if args.Count <= 0 then 
    GetParams = "" 
    exit function 
    end if 

    if args.Count >= 2 then 
    rec = args(1) & " " & args(2) 
    elseif args.count = 1 
    rec = args(1) 
    else 
    rec = "" 
    end if 
    GetParams = rec 
end function 

在VB和VBScript,你的「返回值」由值分配給函數的名稱設置爲我上面已經完成了。

當然,你需要小心,因爲如果沒有參數2被傳入,那麼你最終會得到一個數組下標錯誤,所以總是使用args.Count,正如我在上面演示的那樣,在你試圖訪問各個參數。

如果你有一個更具體的問題或錯誤,或解釋你在做什麼,我們也許可以讓你更好的答案...

+3

你的答案的第一部分是發現,但第二部分是錯的。 [WshArguments](http://msdn.microsoft.com/en-us/library/x49bex47%28v=vs.84%29.aspx)的文檔在這方面並不十分清楚,但快速測試表明,你嘗試訪問一個不存在的參數,WScript只是拋出一個錯誤(它不返回Null)。另外,Null可以與一個字符串連接;它被視爲一個零長度的字符串([參考](http://msdn.microsoft.com/en-us/library/sx97884w%28v=vs.84%29.aspx))。 – 2014-11-06 07:12:09

+0

啊,是的......沒有想法當我寫這些時我在想什麼!如果你嘗試訪問一個不存在的參數,它會拋出一個錯誤,因爲它在一個數組中,並且該元素將不存在。謝謝你指出,我會編輯答案,以確保準確的信息... – LarryF 2014-11-07 00:37:43