Archive for the ‘JScript’ Category

  1. Hello, oo4o(JScript) World!

    Posted on 9月 17th, 2012 by cx20

    oo4o

    oo4o(Oracle Objects for OLE)は、COM ベースの Oracle Database 接続用 API である。
    Windows 環境で VB による開発に用いられることが多い。

    ソースコード(JScript + oo4o + Oracle)

    main();
     
    function main() {
        var ses = new ActiveXObject("OracleInProcServer.XOraSession");
        var db = ses.OpenDatabase( "ORCL", "scott/tiger", 0 );
        var rs = db.CreateDynaset( "SELECT 'Hello, oo4o World!' AS Message FROM DUAL", 4);
     
        while ( !rs.EOF )
        {
            WScript.Echo( rs(0).Name );
            WScript.Echo( "-------------------" );
            WScript.Echo( rs(0).Value );
            rs.MoveNext();
        }
    }

    実行方法

    C:¥> CScript //Nologo Hello.js

    実行結果

    MESSAGE
    ------------------
    Hello, oo4o World!
  2. Hello, COM(JScript) World!

    Posted on 5月 15th, 2012 by cx20

    COM(JScript)

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    以下は JScript による COM クライアント(実行時バインディング)の例となっている。

    ソースコード

    var ssfWINDOWS = 36
     
    main();
     
    function main() {
        var shell = new ActiveXObject("Shell.Application");
        var folder = shell.BrowseForFolder( 0, "Hello, COM(JScript) World!", 0, ssfWINDOWS );
    }

    VBScript であれば Nothing を代入した時点でメモリが解放されるが、JScript では null を代入してもメモリは解放されず(厳密には、Nothing 値と null 値は別物である)、ガベージコレクションが行われたタイミングで解放される。
    以下は、上記の違いを表にまとめたものである。

    JScript VBScript VarType VarType値 内容
    undefined Empty vbEmpty 0 Empty 値 (未初期化)
    null Null vbNull 1 Null 値 (無効な値)
    Nothing vbObject 9 オートメーション オブジェクト

    WSH をホストとする JScript の実行であれば、プロセス終了時にメモリ解放されるが、HTA や IE をホストとした場合、メモリが解放されず問題になることがある。
    この場合、CollectGarbage メソッドを呼び出すことで強制的にガベージ コレクションを行うことは可能であるが、このメソッドは非公開メソッド(ヘルプに記載されていない)であり、利用は推奨されていない。
    別の回避方法としては、Nothing でメモリが解放できる VBScript を使用することが推奨されている。

    実行方法

    C:¥> CScript hello.js

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(JScript) Wolrd!             |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+
  3. Hello, Win32 API(JScript) World!

    Posted on 4月 21st, 2012 by cx20

    Win32 API(JScript)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    JScript には Win32 API を直接呼び出す機能は存在しないが、他のコンポーネントを経由することで、呼び出すことが可能である。
    Win32 API を呼び出すことが可能なコンポーネントとしては「DynamicWrapper」「SFC mini」「Excel」等がある。
    以下は DynamicWrapper を経由した Win32 API 呼出し例である。

    ソースコード(JScript + COM + DynamicWrapper + Win32 API)

    main();
     
    function main() {
        var win32 = new ActiveXObject("DynamicWrapper");
        win32.Register( "user32.dll", "MessageBoxA", "i=hssu", "f=s", "r=l" );
        win32.MessageBoxA( 0, "Hello, Win32 API(JScript) World!", "Hello, World!", 0 );
    }

    以下は SFC mini を経由した Win32 API 呼出し例である。

    ソースコード(JScript + COM + SFC miin + Win32 API)

    main();
     
    function main() {
       var messageBox = new ActiveXObject("SfcMini.DynaCall");
       messageBox.Declare( "user32", "MessageBoxA" );
       messageBox( 0, "Hello, Win32 API(JScript) World!", "Hello, World!", 0 );
    }

    以下は Excel を経由した Win32 API 呼出し例である。実際には、Excel の「Call 関数」を ExecuteExcel4Macro メソッド経由で呼び出す例となっている。

    ソースコード(JScript + COM + Excel + Call 関数 + Win32 API)

    main();
     
    function main() {
        var excel = new ActiveXObject("Excel.Application");
        var strMacro = 'CALL("user32", "MessageBoxA", "JJCCJ", 0,"Hello, Win32 API(JScript) World!", "Hello, World!", 0)'
        excel.ExecuteExcel4Macro( strMacro );
    }

    実行方法

    C:¥> CSciprt hello.js

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API(JScript) World!
    ---------------------------
    OK   
    ---------------------------
  4. Hello, JScript World!

    Posted on 12月 25th, 2011 by cx20

    JScript

    JScript はマイクロソフトによる JavaScript 実装で VBScript 同様に Windows で動作するスクリプト言語である。実行環境としては Windows Script Host(WSH)、Web サーバーである IIS、Web ブラウザである IE 等がある。
    JavaScript が主にブラウザ用であるのに対し、JScript は Windows Script Host を用いて、バッチ処理を記述することも出来る。

    ソースコード

    WScript.Echo( "Hello, JScript World!" );

    実行方法(Windows)

    C:¥> CScript //Nologo hello.js
    

    実行結果

    Hello, JScript World!