Foren: Offene Diskussion (Thread #2991)

オートメーションの呼び出しについて (2003-07-19 06:51 by giraffechariot #5334)

はじめまして
Dmonkey を便利に利用させて頂いております.
(Windows2000, Delphi5, Dmonkey 0.3.5)

Project1 というアウトオブプロセスサーバを作成しました.Project1 は Irvine の様に
API を公開しています.
Project1 はスレッドで Dmonkey スクリプトを実行しています.
実行されたスクリプトの中から逆に Project1 の API をコールしています.

var Guid = Global.arguments[0];
var api = ActiveXObject('Project1.Api');
api.SetStateStr(Guid, 'Start');

このとき,
「プロジェクト Project1.exe が EOleSysError クラスの例外を生成しました'
メンバが見つかりません。'~」
という例外が Run 後の最初の1回だけ必ず発生し,デバッガが以下の場所で停止します.

ecma_engine.pas - TJEngine.MemberExpr
line 1453: Result := parent.vObject.GetValue(Member,False);

この後実行を再開すれば,スクリプトは最後まで何事もなく動くのですが,
この例外はどういった理由によるものでしょうか?

Reply to #5334×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden

RE: オートメーションの呼び出しについて (2003-07-19 06:53 by giraffechariot #5335)

例外は
api.SetStateStr(Guid, 'Start');
の行で発生しています.
Reply to #5334

Reply to #5335×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden

RE: オートメーションの呼び出しについ (2003-07-20 21:36 by giraffechariot #5354)

もっと簡単に,dmw.exe から
var api = ActiveXObject('Irvine.Api');
api.Invalidate();
で,この例外が発生します.

プロパティ,例えば
var api = ActiveXObject('Irvine.Api');
println(api.Version);
では発生しません.
Reply to #5334

Reply to #5354×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden

RE: オートメーションの呼び出しについ (2003-07-23 04:54 by gaogao #5362)

ども、ご利用ありがとうございます。
問題の件は多分、newが抜けているからだと思います。
---

var api = new ActiveXObject('Irvine.Api');

---
ActiveXObjectだけだと、
グローバルオブジェクトを返すので場合によっては動く可能性がある?かもです。

Reply to #5354

Reply to #5362×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden

RE: 再テストしてみました (2003-07-23 16:50 by giraffechariot #5366)

ご返答ありがとうございます.
すいません,new はここに書く時に付け忘れてしまいました.

 改めて,以下の様にテストしてみました.
  ・dmonkey を最新のソースに入れ直して,パッケージ再構築 → 再登録
  ・Irvine 1.0.1 を使っていたので /unregserver
  ・Irvine 1.0.9 & 1.1.1 をダウンロード
  ・1.0.9 を解凍 → 1.1.1 を上書き → 起動
  ・IDE から dmw.exe をコンパイル & 実行
 ソースは今度こそ間違いなく以下の通り
  var api = new ActiveXObject('Irvine.Api');
  api.Invalidate();

とおこなってみましたが,やはり EOleSysError 例外が発生します.
これは IDE からのみ発生していますので構わないといえば構わないのですが.
もう1つありまして

  var http = new HTTP;
  http.onConnect = function(sender) {
   api.SetStateStr('Connect');
  }
  http.get('http://www.google.com/');

この様にイベントの中から API をコールすると,"DMS の時は期待通りに動く"のですが,
なぜか生成された DMC を利用すると ESocketError になります.
そこで今回の例外が絡んでいるのかなと思った次第です.

Reply to #5334

Reply to #5366×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Anmelden