System.Win32.Com.Automation の利用

49 views
Skip to first unread message

高嶋伸介

unread,
May 5, 2013, 8:22:14 PM5/5/13
to haske...@googlegroups.com
高嶋と申します。System.Win32.Com.Automation を利用してHaskellでCOMと
いうのを使ってみたいと思いいろんなweb情報などを参考にしながら次のような
コードを書いてみました
 
import System.Win32.Com
import System.Win32.Com.Automation
main = do
    coInitialize
    objShell <- createObject "WScript.Shell";
    method0
        "Popup"
        [inString "Hello!", inInt 0, inString "How are you?", inInt 0]
        objShell
 
(4-6行目は一段階、7-9行目は2段階字下げしてます。)
 
自分としてはメッセージを一回表示して終了するだけのコードのつもりで作ったんですが、実際にこれをole.hsに保存し
 
runhaskell ole.hs
 
とすると同じメッセージを2回表示してしまいます。
同じ要領でつくったjavascriptのコード
 
var objShell = new ActiveXObject("WScript.Shell");
objShell.Popup('Hello!',0,'How are you?', 0);
は正しく動作します。どなたか原因、対処法についてお気づきの方おられましたら
ご教示ください。よろしくお願いします。
 

高嶋伸介

unread,
May 6, 2013, 5:28:49 AM5/6/13
to haske...@googlegroups.com
高嶋です。自己レスです。
コードを次のように変更したらうまくいきました。
 
import System.Win32.Com
import System.Win32.Com.Automation
main = coRun $ do

    coInitialize
    objShell <- createObject "WScript.Shell";
    method1

        "Popup"
        [inString "Hello!", inInt 0, inString "How are you?", inInt 0]
        outInteger
        objShell
つまりWScript.ShellオブジェクトのPopupメソッドは返り値をもつメソッドで(押されたボタンの値を返す)
このメソッドを呼び出すにはmethod0ではなくmethod1で呼ばないといけないということなのかなと思います。
あるWeb Siteで見つけた例で同じミスをしていたので気づきませんでした。
 
#このcomっていうパッケージ面白いんですけど情報が少ない...


2013年5月6日 9:22 高嶋伸介 <perimet...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages