読者です 読者をやめる 読者になる 読者になる

Gauche OLE 0.3

Gauche-OLE をバージョンアップした。

http://saito.s4.xrea.com/software/Gauche-OLE-0.3.tar.gz

更新内容としては以下。

  • バグ修正
    • 型変換時のチェックのしょうもない間違いの修正
  • 汎用アクセサの定義
  • OLE オブジェクトからの定数取得機能の追加

JScriptチュートリアルで取り上げられる事例を Gauche に置換えて処理できるかどうかを試しながらバグや機能不足を洗い出しているのだけれど、どうにもよくわからない状況に遭遇してしまった。

問題なのは Microsoft.XMLHTTP の利用時である。

var request = new ActiveXObject("Microsoft.XMLHTTP");
request.open('GET', 'http://www.example.com', false);
request.send(null);

if (request.status === 200) {
  console.log(request.responseText);
}

これを Gauche-OLE に置換えるとこうなるはずだ。

#!/usr/bin/env gosh
(use win.ole)

(define request (make-ole "Microsoft.XMLHTTP"))
(request "open" "GET" "http://www.example.com/" #f)
(request "send" '())
(when (equal? 200 (~ request "status"))
  (display (~ request "responseText")))

ところがエラーになってしまう。

$ ./xmlhttprequest.scm
*** OLE-CONDITION: OLE error was thrown. result code = -2147352567
    While loading "././xmlhttprequest.scm" at line 8
Stack Trace:
_______________________________________
  0  (~ request "status")
        At line 7 of "././xmlhttprequest.scm"
  1  (equal? 200 (~ request "status"))
        At line 7 of "././xmlhttprequest.scm"

エラー番号の -2147352567 は例外発生を意味する。 プロパティ status を取得しようとするとエラーになるし、 responseText も同様である。 また、 send の後に readyState の値を見ても 1 のままだったりする。 理由がわからない。

Document ID: 4967a9f9245fa90b012093a750210013