Archive for 2月, 2013

  1. Hello, ODP.NET(IronScheme) World!

    Posted on 2月 16th, 2013 by cx20

    ODP.NET(IronScheme)

    ODP.NET(Oracle Data Provider for .NET)は、.NET ベースの Oracle Database 接続用 API である。ODAC(Oracle Data Access Component)と呼ばれるパッケージに含まれる。
    .NET 環境での Oracle Database 用データプロバイダとしては、マイクロソフト社が提供する「Microsoft Oracle Client」とオラクル社が提供する「ODP.NET」があるが、現在、「Microsoft Oracle Client」はマイクロソフト社自身が非推奨としており、今後は ODP.NET の使用が推奨されている。

    データプロバイダ 説明
    System.Data.OracleClient .NET Framework Data Provider for Oracle
    Oracle.DataAccess.Client Oracle Data Provider for .NET

    ソースコード(IronScheme + ODP.NET + Oracle)

    (import
        (rnrs)
        (ironscheme clr)
    )
     
    (clr-reference System)
    (clr-reference System.Data)
    (clr-reference Oracle.DataAccess)
     
    (clr-using System)
    (clr-using Oracle.DataAccess.Client)
     
    (begin
        (define conStr "Data Source=ORCL;User ID=scott;Password=tiger;")
        (define sqlStr "SELECT 'Hello, ODP.NET World!' AS Message FROM DUAL")
        (define con (clr-new OracleConnection conStr))
        (define cmd (clr-new OracleCommand sqlStr con))
        (clr-call OracleConnection Open con)
        (define reader (clr-call OracleCommand ExecuteReader cmd))
        (if (clr-call OracleDataReader Read reader)
            (begin
                (clr-static-call System.Console WriteLine (clr-call OracleDataReader GetName reader 0))
                (clr-static-call System.Console WriteLine "---------------------")
                (clr-static-call System.Console WriteLine (clr-call OracleDataReader GetValue reader 0))
            )
        )
        (clr-call OracleDataReader Close reader)
        (clr-call OracleConnection Close con)
    )

    コンパイル方法

    C:¥> isc Hello.ss

    実行結果

    MESSAGE
    ---------------------
    Hello, ODP.NET World!
  2. Hello, ADO.NET(IronScheme) World!

    Posted on 2月 15th, 2013 by cx20

    ADO.NET(IronScheme)

    ADO.NET(ActiveX Data Objects .NET)は、ADO の後継で .NET ベースの DBMS 接続用 API である。
    .NET データプロバイダを介することで様々な DBMS への接続が可能となっている。
    .NET Framework 標準で使用できる .NET データプロバイダとしては、以下のようなプロバイダがある。

    データプロバイダ名 説明
    System.Data.SqlClient Microsoft SQL Server
    System.Data.OleDb OLE DB
    System.Data.Odbc ODBC
    System.Data.OracleClient Oracle

    ソースコード(IronScheme + ADO.NET + OLE DB + Jet データベース)

    (import
        (rnrs)
        (ironscheme clr)
    )
     
    (clr-reference System)
    (clr-reference System.Data)
     
    (clr-using System)
    (clr-using System.Data.OleDb)
     
    (begin
        (define conStr "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=hello.mdb")
        (define sqlStr "SELECT 'Hello, ADO.NET World!' AS Message")
        (define con (clr-new OleDbConnection conStr))
        (define cmd (clr-new OleDbCommand sqlStr con))
        (clr-call OleDbConnection Open con)
        (define reader (clr-call OleDbCommand ExecuteReader cmd))
        (if (clr-call OleDbDataReader Read reader)
            (begin
                (clr-static-call System.Console WriteLine (clr-call OleDbDataReader GetName reader 0))
                (clr-static-call System.Console WriteLine "---------------------")
                (clr-static-call System.Console WriteLine (clr-call OleDbDataReader GetValue reader 0))
            )
        )
        (clr-call OleDbDataReader Close reader)
        (clr-call OleDbConnection Close con)
    )

    ソースコード(IronScheme + ADO.NET + OLE DB + ACE データベース)

    (import
        (rnrs)
        (ironscheme clr)
    )
     
    (clr-reference System)
    (clr-reference System.Data)
     
    (clr-using System)
    (clr-using System.Data.OleDb)
     
    (begin
        (define conStr "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=hello.accdb")
        (define sqlStr "SELECT 'Hello, ADO.NET World!' AS Message")
        (define con (clr-new OleDbConnection conStr))
        (define cmd (clr-new OleDbCommand sqlStr con))
        (clr-call OleDbConnection Open con)
        (define reader (clr-call OleDbCommand ExecuteReader cmd))
        (if (clr-call OleDbDataReader Read reader)
            (begin
                (clr-static-call System.Console WriteLine (clr-call OleDbDataReader GetName reader 0))
                (clr-static-call System.Console WriteLine "---------------------")
                (clr-static-call System.Console WriteLine (clr-call OleDbDataReader GetValue reader 0))
            )
        )
        (clr-call OleDbDataReader Close reader)
        (clr-call OleDbConnection Close con)
    )

    ソースコード(IronScheme + ADO.NET + SQL Server)

    (import
        (rnrs)
        (ironscheme clr)
    )
     
    (clr-reference System)
    (clr-reference System.Data)
     
    (clr-using System)
    (clr-using System.Data.SqlClient)
     
    (begin
        (define conStr "SERVER=(local);DATABASE=master;UID=sa;PWD=P@ssW0rd;")
        (define sqlStr "SELECT 'Hello, ADO.NET World!' AS Message")
        (define con (clr-new SqlConnection conStr))
        (define cmd (clr-new SqlCommand sqlStr con))
        (clr-call SqlConnection Open con)
        (define reader (clr-call SqlCommand ExecuteReader cmd))
        (if (clr-call SqlDataReader Read reader)
            (begin
                (clr-static-call System.Console WriteLine (clr-call SqlDataReader GetName reader 0))
                (clr-static-call System.Console WriteLine "---------------------")
                (clr-static-call System.Console WriteLine (clr-call SqlDataReader GetValue reader 0))
            )
        )
        (clr-call SqlDataReader Close reader)
        (clr-call SqlConnection Close con)
    )

    ソースコード(IronScheme + ADO.NET + Oracle)

    (import
        (rnrs)
        (ironscheme clr)
    )
     
    (clr-reference System)
    (clr-reference System.Data)
     
    (clr-using System)
    (clr-using System.Data.OracleClient)
     
    (begin
        (define conStr "Data Source=ORCL;User ID=scott;Password=tiger;")
        (define sqlStr "SELECT 'Hello, ADO.NET World!' AS Message FROM DUAL")
        (define con (clr-new OracleConnection conStr))
        (define cmd (clr-new OracleCommand sqlStr con))
        (clr-call OracleConnection Open con)
        (define reader (clr-call OracleCommand ExecuteReader cmd))
        (if (clr-call OracleDataReader Read reader)
            (begin
                (clr-static-call System.Console WriteLine (clr-call OracleDataReader GetName reader 0))
                (clr-static-call System.Console WriteLine "---------------------")
                (clr-static-call System.Console WriteLine (clr-call OracleDataReader GetValue reader 0))
            )
        )
        (clr-call OracleDataReader Close reader)
        (clr-call OracleConnection Close con)
    )

    ソースコード(IronScheme + ADO.NET + ODBC + MySQL)

    (import
        (rnrs)
        (ironscheme clr)
    )
     
    (clr-reference System)
    (clr-reference System.Data)
     
    (clr-using System)
    (clr-using System.Data.Odbc)
     
    (begin
        (define conStr "Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd")
        (define sqlStr "SELECT 'Hello, ADO.NET World!' AS MessageL")
        (define con (clr-new OdbcConnection conStr))
        (define cmd (clr-new OdbcCommand sqlStr con))
        (clr-call OdbcConnection Open con)
        (define reader (clr-call OdbcCommand ExecuteReader cmd))
        (if (clr-call OdbcDataReader Read reader)
            (begin
                (clr-static-call System.Console WriteLine (clr-call OdbcDataReader GetName reader 0))
                (clr-static-call System.Console WriteLine "---------------------")
                (clr-static-call System.Console WriteLine (clr-call OdbcDataReader GetValue reader 0))
            )
        )
        (clr-call OdbcDataReader Close reader)
        (clr-call OdbcConnection Close con)
    )

    実行方法

    C:¥> isc Hello.ss

    実行結果

    Message
    ---------------------
    Hello, ADO.NET World!
  3. Hello, ODP.NET(IronRuby) World!

    Posted on 2月 14th, 2013 by cx20

    ODP.NET(IronRuby)

    ODP.NET(Oracle Data Provider for .NET)は、.NET ベースの Oracle Database 接続用 API である。ODAC(Oracle Data Access Component)と呼ばれるパッケージに含まれる。
    .NET 環境での Oracle Database 用データプロバイダとしては、マイクロソフト社が提供する「Microsoft Oracle Client」とオラクル社が提供する「ODP.NET」があるが、現在、「Microsoft Oracle Client」はマイクロソフト社自身が非推奨としており、今後は ODP.NET の使用が推奨されている。

    データプロバイダ 説明
    System.Data.OracleClient .NET Framework Data Provider for Oracle
    Oracle.DataAccess.Client Oracle Data Provider for .NET

    ソースコード(IronRuby + ODP.NET + Oracle)

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    require 'Oracle.DataAccess'
     
    include System
    include System::Data
    include Oracle::DataAccess::Client
     
    conStr = "Data Source=ORCL;User ID=scott;Password=tiger"
    sqlStr = "SELECT 'Hello, ODP.NET World!' AS Message FROM DUAL"
     
    con = OracleConnection.new(conStr)
    cmd = OracleCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    コンパイル方法

    C:¥> ir Hello.rb

    実行結果

    MESSAGE
    ---------------------
    Hello, ODP.NET World!
  4. Hello, ADO.NET(IronRuby) World!

    Posted on 2月 13th, 2013 by cx20

    ADO.NET(IronRuby)

    ADO.NET(ActiveX Data Objects .NET)は、ADO の後継で .NET ベースの DBMS 接続用 API である。
    .NET データプロバイダを介することで様々な DBMS への接続が可能となっている。
    .NET Framework 標準で使用できる .NET データプロバイダとしては、以下のようなプロバイダがある。

    データプロバイダ名 説明
    System.Data.SqlClient Microsoft SQL Server
    System.Data.OleDb OLE DB
    System.Data.Odbc ODBC
    System.Data.OracleClient Oracle

    ソースコード(IronRuby + ADO.NET + OLE DB + Jet データベース)

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    include System
    include System::Data
    include System::Data::OleDb
     
    conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=hello.mdb;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OleDbConnection.new(conStr)
    cmd = OleDbCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    ソースコード(IronRuby + ADO.NET + OLE DB + ACE データベース)

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    include System
    include System::Data
    include System::Data::OleDb
     
    conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=hello.accdb;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OleDbConnection.new(conStr)
    cmd = OleDbCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    ソースコード(IronRuby + ADO.NET + SQL Server)

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    include System
    include System::Data
    include System::Data::SqlClient
     
    conStr = "SERVER=(local);DATABASE=master;UID=sa;PWD=P@ssW0rd;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = SqlConnection.new(conStr)
    cmd = SqlCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    ソースコード(IronRuby + ADO.NET + Oracle)

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    require 'System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
     
    include System
    include System::Data
    include System::Data::OracleClient
     
    conStr = "Data Source=ORCL;User ID=scott;Password=tiger"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message FROM DUAL"
     
    con = OracleConnection.new(conStr)
    cmd = OracleCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    ソースコード(IronRuby + ADO.NET + ODBC + MySQL)

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    include System
    include System::Data::Odbc
     
    conStr = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OdbcConnection.new(conStr)
    cmd = OdbcCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    実行方法(64bit OLE DB 使用時)

    C:¥> ir64 Hello.rb

    実行方法(上記以外)

    C:¥> ir Hello.rb

    実行結果

    Message
    ---------------------
    Hello, ADO.NET World!
  5. Hello, ODP.NET(IronPython) World!

    Posted on 2月 12th, 2013 by cx20

    ODP.NET(IronPython)

    ODP.NET(Oracle Data Provider for .NET)は、.NET ベースの Oracle Database 接続用 API である。ODAC(Oracle Data Access Component)と呼ばれるパッケージに含まれる。
    .NET 環境での Oracle Database 用データプロバイダとしては、マイクロソフト社が提供する「Microsoft Oracle Client」とオラクル社が提供する「ODP.NET」があるが、現在、「Microsoft Oracle Client」はマイクロソフト社自身が非推奨としており、今後は ODP.NET の使用が推奨されている。

    データプロバイダ 説明
    System.Data.OracleClient .NET Framework Data Provider for Oracle
    Oracle.DataAccess.Client Oracle Data Provider for .NET

    ソースコード(IronPython + ODP.NET + Oracle)

    import clr
    clr.AddReference("System.Data")
    clr.AddReference("Oracle.DataAccess")
    from System import *
    from Oracle.DataAccess.Client import *
     
    conStr = "Data Source=ORCL;User ID=scott;Password=tiger"
    sqlStr = "SELECT 'Hello, ODP.NET World!' AS Message FROM DUAL"
     
    con = OracleConnection(conStr)
    cmd = OracleCommand(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read():
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
     
    reader.Close()
    con.Close()

    コンパイル方法

    C:¥> ipy Hello.py

    実行結果

    MESSAGE
    ---------------------
    Hello, ODP.NET World!
  6. Hello, ADO.NET(IronPython) World!

    Posted on 2月 11th, 2013 by cx20

    ADO.NET(IronPython)

    ADO.NET(ActiveX Data Objects .NET)は、ADO の後継で .NET ベースの DBMS 接続用 API である。
    .NET データプロバイダを介することで様々な DBMS への接続が可能となっている。
    .NET Framework 標準で使用できる .NET データプロバイダとしては、以下のようなプロバイダがある。

    データプロバイダ名 説明
    System.Data.SqlClient Microsoft SQL Server
    System.Data.OleDb OLE DB
    System.Data.Odbc ODBC
    System.Data.OracleClient Oracle

    ソースコード(IronPython + ADO.NET + OLE DB + Jet データベース)

    import clr
    clr.AddReference("System.Data")
    from System import *
    from System.Data.OleDb import *
     
    conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=hello.mdb;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OleDbConnection(conStr)
    cmd = OleDbCommand(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read():
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
     
    reader.Close()
    con.Close()

    ソースコード(IronPython + ADO.NET + OLE DB + ACE データベース)

    import clr
    clr.AddReference("System.Data")
    from System import *
    from System.Data.OleDb import *
     
    conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=hello.accdb;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OleDbConnection(conStr)
    cmd = OleDbCommand(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read():
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
     
    reader.Close()
    con.Close()

    ソースコード(IronPython + ADO.NET + SQL Server)

    import clr
    clr.AddReference("System.Data")
    from System import *
    from System.Data.SqlClient import *
     
    conStr = "SERVER=(local);DATABASE=master;UID=sa;PWD=P@ssW0rd;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = SqlConnection(conStr)
    cmd = SqlCommand(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read():
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
     
    reader.Close()
    con.Close()

    ソースコード(IronPython + ADO.NET + Oracle)

    import clr
    clr.AddReference("System.Data")
    clr.AddReference("System.Data.OracleClient")
    from System import *
    from System.Data.OracleClient import *
     
    conStr = "Data Source=ORCL;User ID=scott;Password=tiger"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message FROM DUAL"
     
    con = OracleConnection(conStr)
    cmd = OracleCommand(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read():
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
     
    reader.Close()
    con.Close()

    ソースコード(IronPython + ADO.NET + ODBC + MySQL)

    import clr
    clr.AddReference("System.Data")
    from System import *
    from System.Data.Odbc import *
     
    conStr = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OdbcConnection(conStr)
    cmd = OdbcCommand(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read():
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
     
    reader.Close()
    con.Close()

    実行方法(64bit OLE DB 使用時)

    C:¥> ipy64 Hello.py

    実行方法(上記以外)

    C:¥> ipy Hello.py

    実行結果

    Message
    ---------------------
    Hello, ADO.NET World!
  7. Hello, COM(Oxygene) World!

    Posted on 2月 10th, 2013 by cx20

    COM(Oxygene)

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

    ソースコード(実行時バインディング)

    namespace hello;
     
    interface
    uses
        System,
        System.Reflection,
        System.Runtime.InteropServices;
     
    type
        Hello = class
    public
        class method Main(args: array of String): Integer;
    end;
     
    implementation
     
    class method Hello.Main(args: array of String): Integer;
    var
        objType: System.Type;
        shell: Object;
        param: array of Object;
        folder: Object;
    begin
        objType := System.Type.GetTypeFromProgID("Shell.Application"); 
        shell := Activator.CreateInstance(objType);
        param := [ 0, "Hello, COM(Oxygene) World!", 0, 36 ];
        folder := shell.GetType().InvokeMember( "BrowseForFolder", BindingFlags.InvokeMethod, nil, shell, param );
        if folder  nil then begin
            Marshal.ReleaseComObject(folder);
        end;
        Marshal.ReleaseComObject(shell);
    end;
     
    end.

    コンパイル方法(実行時バインディング)

    C:¥> oxygene Hello.pas

    実行結果

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

    Posted on 2月 9th, 2013 by cx20

    COM(Nemerle)

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

    ソースコード(実行時バインディング)

    using System;
    using System.Reflection;
    using System.Runtime.InteropServices;
     
    class Hello {
        public static Main() : void {
            def objType = Type.GetTypeFromProgID("Shell.Application"); 
            def shell = Activator.CreateInstance(objType);
            def hwnd = 0;
            def title = "Hello, COM(Nemerle) World!" : object;
            def option = 0;
            def rootFolder = 36;
            def param = array[ hwnd, title, option, rootFolder ];
            def folder = shell.GetType().InvokeMember( 
                "BrowseForFolder", BindingFlags.InvokeMethod, null, shell, param );
            when (folder != null)
            {
                _ = Marshal.ReleaseComObject(folder);
            }
            _ = Marshal.ReleaseComObject(shell);
        }
    }

    コンパイル方法(実行時バインディング)

    C:¥> ncc -o Hello.exe Hello.n

    実行結果

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

    Posted on 2月 8th, 2013 by cx20

    COM(Boo)

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

    ソースコード(実行時バインディング)

    import System
    import System.Reflection
    import System.Runtime.InteropServices
     
    [STAThread]
    def Main(argv as (string)):
        objType = Type.GetTypeFromProgID("Shell.Application") 
        shell = Activator.CreateInstance(objType)
        param as (object) = ( 0, "Hello, COM(Boo) World!", 0, 36 )
        folder = shell.GetType().InvokeMember( "BrowseForFolder", BindingFlags.InvokeMethod, null, shell, param )
        if (folder != null):
            Marshal.ReleaseComObject(folder)
        Marshal.ReleaseComObject(shell)

    コンパイル方法(実行時バインディング)

    C:¥> booc Hello.boo

    実行結果

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

    Posted on 2月 6th, 2013 by cx20

    COM(Cobra)

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

    ソースコード(実行時バインディング)

    use System
    use System.Reflection
    use System.Runtime.InteropServices
     
    class Program
        def main is shared
            objType = Type.getTypeFromProgID("Shell.Application") 
            shell = Activator.createInstance(objType)
            param = @[ 0, "Hello, COM(Cobra) World!", 0, 36 ]
            folder = shell.getType.invokeMember( 
                "BrowseForFolder", BindingFlags.InvokeMethod, nil, shell, param )
            if folder  nil
                Marshal.releaseComObject(folder)
            Marshal.releaseComObject(shell)

    コンパイル方法(実行時バインディング)

    C:¥> cobra -compile Hello.cobra

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(Cobra) Wolrd!               |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+