Как я могу программно проверить ActiveXObject во время выполнения, используя Javascript? - PullRequest
0 голосов
/ 17 января 2010

Я хочу создать библиотеку Javascript для объектов ActiveX, обеспечивающую возможность объединения.

Например, я хочу заменить это:

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

на что-то подобное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.Чтобы сделать это, функция AX должна создать объект DBEngine внутри и проверить его элементы / свойства, а затем предоставить соответствующие методы возвращенному объекту.

Если элемент / свойство возвращает объект, сам этот объект будетбыть возвращенным в функции AX.

1 Ответ

1 голос
/ 18 января 2010

Только объекты, которые реализуют IDispatchEx, могут быть проверены во время выполнения. В MSDN конкретно перечислены различия между IDispatch и IDispatchEx :

IDispatchEx был разработан для обеспечения а также все сервисы IDispatch как некоторые расширения, которые подходит для более динамичного языки с поздней привязкой, такие как сценарии языки. Дополнительные функции IDispatchEx помимо тех, которые предоставляются IDispatch являются:

Добавление новых членов в объект ( "EXPANDO").

Удалить элементы объекта.

Операции отправки с учетом регистра.

Поиск члена с неявным имя.

Перечислите DISPID объекта .

Карта от DISPID до имени элемента.

получение свойств объекта члены.

вызов метода с этим указатель.

Разрешить браузеры, которые поддерживают Концепция пространств имен для получения пространство имен родительский для объекта.

Я выделил жирным шрифтом соответствующий вопрос.

Как указывает Эрик в комментариях, вы можете использовать перечисление членов объектов, используя foreach (или для ... in, возможно?), Но я не уверен, исходя из вопроса, что вы конкретно хотите сделать .

Поскольку не все элементы управления ActiveX будут реализовывать IDispatchEx (или могут не реализовывать все методы IDispatchEx должным образом или полностью), существуют ли конкретные элементы управления, с которыми вы хотите поиграть?

Более подробная информация приведет к лучшим ответам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...