-2

私は ActiveX オブジェクト用の Javascript ライブラリを作成して、連鎖可能性を実現しようとしています。

たとえば、これを置き換えようとしています:

var dbEngine=new ActiveXObject('DAO.DBEngine.36');
var dbs=dbEngine.OpenDatabase('D:\\Todo.mdb');
var rs=dbs.OpenRecordset('SELECT * FROM ListItems');

このようなもので(la jQuery):

var rs=AX('DAO.DBEngine.36')
    .OpenDatabase('D:\\Todo.mdb')
    .OpenRecordset('SELECT * FROM ListItems');

私はこれを行うことができることを知っています:

var rs=new ActiveXObject('DAO.DBEngine.36')
    .OpenDatabase('D:\\Todo.mdb')
    .OpenRecordset('SELECT * FROM ListItems');

しかし、Recordset オブジェクトから Database オブジェクトにアクセスする方法がありません。

これを行うために、AX 関数は内部で DBEngine オブジェクトを作成し、そのメンバー/プロパティを検査してから、返されたオブジェクトで対応するメソッドを公開する必要があります。

メンバー/プロパティがオブジェクトを返す場合、そのオブジェクト自体が AX 関数にラップされて返されます。

4

1 に答える 1

1

実行時に検査できるのは、IDispatchEx を実装するオブジェクトのみです。MSDN は、 IDispatch とIDispatchExの違いを具体的に示しています。

IDispatchEx は、IDispatch のすべてのサービスと、スクリプト言語などのより動的な遅延バインド言語に適したいくつかの拡張機能を提供するために開発されました。IDispatch によって提供される機能以外の IDispatchEx の追加機能は次のとおりです。

オブジェクトに新しいメンバーを追加します ("expando")。

オブジェクトのメンバーを削除します。

大文字と小文字を区別するディスパッチ操作。

暗黙の名前を持つメンバーを検索します。

オブジェクトの DISPID を列挙します

DISPID から要素名にマップします。

オブジェクト メンバーのプロパティを取得します。

このポインターを使用したメソッド呼び出し。

名前空間の概念をサポートするブラウザーが、オブジェクトの名前空間の親を取得できるようにします。

関連する問題を太字にしました。

エリックがコメントで指摘しているように、foreach (またはおそらく for...in ?) を使用してオブジェクトのメンバーを列挙できますが、質問から、具体的に何をしたいのかわかりません。

すべての ActiveX コントロールが IDispatchEx を実装するわけではない (または IDispatchEx のすべてのメソッドを適切または完全に実装するとは限らない) ため、使用したい特定のコントロールはありますか?

詳細はより良い回答につながります。

于 2010-01-17T21:08:29.583 に答える