Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

вопрос про ADO: Басик против VC ?

1.8K
27 мая 2003 года
shrize
46 / / 04.12.2002
Я начинал писать с VB и досовский C++, потом перешел на VC++
Но ностальгию иногда не прочь половить:)(в плане VB)
И заметил что ADO работает быстрее на VB(вроде был не пьяным):( в принципе на сегоднишних компах это сильно не заметно, но обидно?
Так вот вопрос желательно чтобы многие ответили:))
Как вы соединяетесь люди с БД, что ... вообщем не жалуетесь.Я сижу через #import.
Могет это Dispatch?
И вообще библиотека ADO случаем не на VB написана:)
3.7K
29 мая 2003 года
dajigin
16 / / 11.05.2003
Глубоко сомниваюсь. Ну, сделай конфигурацию release и оптимизацию по скорости.....
ADO представляет собой набор COM - объектов. Ему глубоко пофигу, из какого языка его вызывают. Теоретически, на всех языках он работает с одинаковой скоростью. Но не совсем. На VB, при правильном использовании, он должен работать МЕДЛЕННЕЕ, чем на VC по следующей причине:
C помощью VC можно получить напрямую доступ, через интерфейсы, к виртуальной таблице функций. VB такой возможности не имеет. Когда ты вызываешь на VB какой-либо метод, он выполняет следующие шаги:
- Получает указатель на интерфейс IDispatch;
- Вызывает функцию GetIDsOfNames, чтобы получить идентификатор функции по имени.
- Вызывает функцию Invoke, полученный выше идентификатор как параметр.
- Invoke, в свою очередь, вызывает требуемую функцию.
В VC, при правильном использовании, эти шаги отсутствуют. Может, ты чего не так делаешь? Пример:
1) В stdafx.h в конце приписываешь #import "C:\\msado26.tlb" rename("EOF","ADOEOF") no_namespace , или что там у тебя? Может, msado15.dll?
Деректива #import создает в твоем результирующем каталоге файл с расширением .tlh, в котором определены типы т.н. "Интеллектуальных указателей" (с помощью COM_SMARTPTR_TYPEDEF). Эти типы носят название [ИмяИнтерфейса]Ptr.
2). В требуемом месте (где-нить в заголовочном файле) создаем требуемые объекты типа интеллектуального указателя. Например:
_RecordsetPtr mRecordset;
3). Создаем объект (где-нить в инициализации. Например, OnInitDialog) ADODB.Recordset:
mRecordset.CreateInstance("ADODB.Recordset");
4). Вызываем его функции:
mRecordset->[ИмяФункции]([параметры])

Если ты не знаком с интеллектуальными указателями,обрати внимание, что он работает с одной стороны как объект (.CreateInstance(...)) а с другой стороны - как указатель. (->[ИмяФункции]).
1.8K
29 мая 2003 года
shrize
46 / / 04.12.2002
Я видимо не правильно выразился:)) Когда в первый раз запускаешь программу. Мне кажется что у VB инициализация Com, происходит быстрее, чем на VC
1.8K
29 мая 2003 года
shrize
46 / / 04.12.2002
Я видимо не правильно выразился:)) Когда в первый раз запускаешь программу. Мне кажется что у VB инициализация Com, происходит быстрее, чем на VC

"C:\\msado26.tlb" rename("EOF","ADOEOF") no_namespace , или что там у тебя? Может, msado15.dll?

у меня msado15.dll
3.7K
29 мая 2003 года
dajigin
16 / / 11.05.2003
у меня msado15.dll -Неважно... Ну, #import "msado15.dll"..

Когда в первый раз запускаешь программу.

Не знаю. Не могу сравнить.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог