-
Hello, COM(JRuby) World!
Posted on 1月 19th, 2013 by cx20
COM(JRuby)
COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
COM を用いて開発された部品であれば言語を問わず利用することができる。
JRuby 自身には、COM を呼び出す機能を持っていないが、別途ライブラリを経由することで呼び出すことが可能である。
以下は JRuby より JACOB(JAVA-COM Bridge) ライブラリを使用した COM クライアントの例となっている。ソースコード
require 'java' require 'jacob.jar' import 'com.jacob.com.Variant' import 'com.jacob.activeX.ActiveXComponent' @shell = ActiveXComponent.new("Shell.Application") @hwnd = Variant.new(0) @title = Variant.new("Hello, COM(JACOB) World!") @option = Variant.new(0) @rootFolder = Variant.new(36) @params = [ @hwnd, @title, @option, @rootFolder ] @folder = @shell.invoke( "BrowseForFolder", @params )
実行方法
C:¥> jruby Hello.rb
実行結果
+----------------------------------------+ |Browse For Folder [X]| +----------------------------------------+ | Hello, COM(JACOB) Wolrd! | | | | +------------------------------------+ | | |[Windows] | | | | +[addins] | | | | +[AppCompat] | | | | +[AppPatch] | | | | +[assembly] | | | | : | | | | : | | | | : | | | +------------------------------------+ | | [Make New Folder] [ OK ] [Cancel] | +----------------------------------------+
-
Hello, COM(Scala) World!
Posted on 1月 18th, 2013 by cx20
COM(Scala)
COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
COM を用いて開発された部品であれば言語を問わず利用することができる。
Scala 自身には、COM を呼び出す機能を持っていないが、別途ライブラリを経由することで呼び出すことが可能である。
以下は Scala より JACOB(JAVA-COM Bridge) ライブラリを使用した COM クライアントの例となっている。ソースコード
import com.jacob.com.Variant import com.jacob.activeX.ActiveXComponent object Hello { def main (args: Array[String]) { var shell = new ActiveXComponent("Shell.Application") var hwnd = new Variant(0) var title = new Variant("Hello, COM(JACOB) World!") var option = new Variant(0) var rootFolder = new Variant(36) var params = Array( hwnd, title, option, rootFolder ) var folder = shell.invoke( "BrowseForFolder", params ) } }
実行方法
C:¥> scala -cp jacob.jar;. Hello.scala
実行結果
+----------------------------------------+ |Browse For Folder [X]| +----------------------------------------+ | Hello, COM(JACOB) Wolrd! | | | | +------------------------------------+ | | |[Windows] | | | | +[addins] | | | | +[AppCompat] | | | | +[AppPatch] | | | | +[assembly] | | | | : | | | | : | | | | : | | | +------------------------------------+ | | [Make New Folder] [ OK ] [Cancel] | +----------------------------------------+
-
Hello, COM(Groovy) World!
Posted on 1月 17th, 2013 by cx20
COM(Groovy)
COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
COM を用いて開発された部品であれば言語を問わず利用することができる。
Groovy 自身には、COM を呼び出す機能を持っていないが、別途ライブラリを経由することで呼び出すことが可能である。
以下は Groovy より JACOB(JAVA-COM Bridge) ライブラリを使用した COM クライアントの例となっている。ソースコード
import com.jacob.com.Variant import com.jacob.activeX.ActiveXComponent class Hello { static void main (args) { def shell = new ActiveXComponent("Shell.Application") def hwnd = new Variant(0) def title = new Variant("Hello, COM(JACOB) World!") def option = new Variant(0) def rootFolder = new Variant(36) def params = [ hwnd, title, option, rootFolder ] as Variant[] def folder = shell.invoke( "BrowseForFolder", params ) } }
実行方法
C:¥> groovy Hello.groovy
実行結果
+----------------------------------------+ |Browse For Folder [X]| +----------------------------------------+ | Hello, COM(JACOB) Wolrd! | | | | +------------------------------------+ | | |[Windows] | | | | +[addins] | | | | +[AppCompat] | | | | +[AppPatch] | | | | +[assembly] | | | | : | | | | : | | | | : | | | +------------------------------------+ | | [Make New Folder] [ OK ] [Cancel] | +----------------------------------------+
-
Hello, Win32 API(Jasmin) World!
Posted on 1月 16th, 2013 by cx20
Win32 API(Jasmin)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は Jasmin にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。ソースコード
; Produced by NeoJasminVisitor (tinapoc) ; http://tinapoc.sourceforge.net ; The original JasminVisitor is part of the BCEL ; http://jakarta.apache.org/bcel/ ; Sat Dec 08 23:04:58 JST 2012 .bytecode 51.0 .source Hello.java .class public Hello .super java/lang/Object .method public ()V .limit stack 1 .limit locals 1 .var 0 is this LHello; from Label0 to Label1 Label0: .line 4 0: aload_0 1: invokespecial java/lang/Object/()V Label1: 4: return .end method .method public static main([Ljava/lang/String;)V .limit stack 5 .limit locals 3 .var 0 is arg0 [Ljava/lang/String; from Label0 to Label1 Label0: .line 6 0: new org/eclipse/swt/internal/win32/TCHAR 3: dup 4: iconst_0 5: ldc "Hello, Win32 API World!" 7: iconst_1 8: invokespecial org/eclipse/swt/internal/win32/TCHAR/(ILjava/lang/String;Z)V 11: astore_1 .line 7 12: new org/eclipse/swt/internal/win32/TCHAR 15: dup 16: iconst_0 17: ldc "Hello, World" 19: iconst_1 20: invokespecial org/eclipse/swt/internal/win32/TCHAR/(ILjava/lang/String;Z)V 23: astore_2 .line 8 24: iconst_0 25: aload_1 26: aload_2 27: iconst_0 28: invokestatic org/eclipse/swt/internal/win32/OS/MessageBox(ILorg/eclipse/swt/internal/win32/TCHAR;Lorg/eclipse/swt/internal/win32/TCHAR;I)I 31: pop Label1: .line 9 32: return .end method
コンパイル&実行方法
C:¥> jasmin Hello.j C:¥> java -cp org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;. Hello
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API World! --------------------------- OK ---------------------------
-
Hello, Win32 API(Rhino) World!
Posted on 1月 14th, 2013 by cx20
Win32 API(Rhino)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は Rhino にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。ソースコード
importPackage(org.eclipse.swt.internal.win32); var lpText = new TCHAR(0, "Hello, Win32 API World!", true); var lpCaption = new TCHAR(0, "Hello, World", true); OS.MessageBox(0, lpText, lpCaption, OS.MB_OK );
実行方法
C:¥> jrunscript -cp org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;. Hello.js
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API World! --------------------------- OK ---------------------------
-
Hello, Win32 API(Tcl/Java) World!
Posted on 1月 13th, 2013 by cx20
Win32 API(Tcl/Java)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は Tcl/Java にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。ソースコード
package require java java::import org.eclipse.swt.internal.win32.OS java::import org.eclipse.swt.internal.win32.TCHAR set lpText [java::new {TCHAR int java.lang.String boolean} 0 "Hello, Win32 API World!" true] set lpCaption [java::new {TCHAR int java.lang.String boolean} 0 "Hello, World" true] java::call OS MessageBox 0 $lpText $lpCaption [java::field OS MB_OK]
実行方法
C:¥> SET CLASSPATH=org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;%CLASSPATH% C:¥> jaclsh Hello.tcl
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API World! --------------------------- OK ---------------------------
-
Hello, Win32 API(BeanShell) World!
Posted on 1月 12th, 2013 by cx20
Win32 API(BeanShell)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は BeanShell にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。ソースコード
import org.eclipse.swt.internal.win32.OS; import org.eclipse.swt.internal.win32.TCHAR; TCHAR lpText = new TCHAR(0, "Hello, Win32 API World!", true); TCHAR lpCaption = new TCHAR(0, "Hello, World", true); OS.MessageBox(0, lpText, lpCaption, OS.MB_OK );
実行方法
C:¥> SET CLASSPATH=bsh-2.0b4.jar;org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;%CLASSPATH% C:¥> java bsh.Interpreter Hello.bsh
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API World! --------------------------- OK ---------------------------
-
Hello, Win32 API(Clojure) World!
Posted on 1月 11th, 2013 by cx20
Win32 API(Clojure)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は Clojure にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。ソースコード
(import (org.eclipse.swt.internal.win32 OS) (org.eclipse.swt.internal.win32 TCHAR)) (def lpText (TCHAR. 0 "Hello, Win32 API World!" true)) (def lpCaption (TCHAR. 0 "Hello, World" true)) (. OS (MessageBox 0 lpText lpCaption OS/MB_OK))
実行方法
C:¥> SET CLASSPATH=org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;%CLASSPATH% C:¥> clj Hello.clj
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API World! --------------------------- OK ---------------------------
-
Hello, Win32 API(Jython) World!
Posted on 1月 10th, 2013 by cx20
Win32 API(Jython)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は Jython にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。ソースコード
from org.eclipse.swt.internal.win32 import OS from org.eclipse.swt.internal.win32 import TCHAR lpText = TCHAR(0, "Hello, Win32 API World!", True) lpCaption = TCHAR(0, "Hello, World", True) OS.MessageBox(0, lpText, lpCaption, OS.MB_OK )
実行方法
C:¥> SET CLASSPATH=org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;%CLASSPATH% C:¥> jython Hello.py
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API World! --------------------------- OK ---------------------------
-
Hello, Win32 API(JRuby) World!
Posted on 1月 9th, 2013 by cx20
Win32 API(JRuby)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は JRuby にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。ソースコード
require 'java' require 'org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar' import 'org.eclipse.swt.internal.win32.OS' import 'org.eclipse.swt.internal.win32.TCHAR' @lpText = TCHAR.new(0, "Hello, Win32 API World!", true) @lpCaption = TCHAR.new(0, "Hello, World", true) OS::MessageBox(0, @lpText, @lpCaption, OS::MB_OK )
実行方法
C:¥> jruby Hello.rb
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API World! --------------------------- OK ---------------------------