Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Staser
Сообщений: n/a
#1

DAO и CBuilder - C++

26.05.2010, 13:41. Просмотров 668. Ответов 0
Метки нет (Все метки)

Уважаемые программисты! Помогите разобраться, как же все-таки заставить
работать COM-билиотеку DAO на благо человечества?!!

Теория:
Для созданных на основе спецификации СОМ приложений не важно,
какой язык программирования использовался при их разработке —
если стандарт СОМ соблюден, взаимодействие осуществляется
без помех.

Задача (упрощенная, пониженной сложности):
Используется среда разработки CBuilder 6.
OS Windows 2k, библиотека от мелкомягкой фирмы Dao360.dll
Нужно добраться до метода CreateВDatabase и создать БД,
например Dao_Access.mdb (еще можно создать пару полей для наглядности)

Практика:
На VB: все рулез: подцепил библиотеку, получил доступ к содержимому
На Delphi: даже ничего подцеплять не надо, все само работает ))
На CBuilder: (( (а писать надо, естессно на нем)

Ход работы:
По ProgId 'DAO.DBEngine.36' получли соответствующий Clsid,
в итоге добрались до IUnkcnown.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//------------------------------------------------------
 
   Memo1->Lines->Add('Начало работы');
 
 
   // Инициализируем COM
   if ( FAILED(CoInitialize(NULL)) )   Memo1->Lines->Add('Невозможно инициализировать COM');
   else                                Memo1->Lines->Add('COM успешно инициализирован');
 
 
   // Преобразуем ProgID в CLSID
 
   HRESULT hr = CLSIDFromProgID(DAO_PROG_ID, &DAO_CLASS_ID);
 
   if ( FAILED( hr ) )   Memo1->Lines->Add('Невозможно получить CLSID по ProgID');
   else                  Memo1->Lines->Add('CLSID успешно получен по ProgID');
 
   
   // Получаем экземпляр фабрики классов
   IClassFactory* pCF;
   hr = CoGetClassObject(DAO_CLASS_ID, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, NULL, IID_IClassFactory, (void**) &pCF );
 
   if ( FAILED( hr ) )   Memo1->Lines->Add('Невозможно получить фабрику классов IClassFactory');
   else                  Memo1->Lines->Add('Получена фабрика классов IClassFactory');
 
 
   // С помощью фабрики классов создаем экземпляр компонента
   // и получаем интерфейс IUnknown
   IUnknown* pUnk;
   hr = pCF->CreateInstance(NULL, IID_IUnknown, (void**) &pUnk );
 
   pCF->Release();
 
   if ( FAILED( hr ) )   Memo1->Lines->Add('Невозможно получить интерфес IUnknown');
   else                  Memo1->Lines->Add('Получен интерфес IUnknown');
 
 
   // Получаем объект _DBEngine
   
/*
   ???????????????????????????????
   ???????????????????????????????
   ???????????????????????????????
 
   ... и создаем базу методом CreateTable!
*/
   pUnk->Release();
 
//------------------------------------------------------
И вот в этом месте полный затык, а ведь все наверняка достаточно просто.

в одном из примеров приводилась директива
#import, но в билдере импортирование dao360.dll приводит к ошибке!
Слышал, что еще можно как-то через IDispatch...

В общем, кто действительно знает, буду очень признателен!

P.S. Работающий код с комментариями - лучший help!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2010, 13:41     DAO и CBuilder
Посмотрите здесь:

Вопрос по TImage в CBuilder C++ Builder
C++ Определить, есть ли в массиве повторяющиеся значения.CBuilder
C++ Как открыть файл "xxx.mdb" технологией DAO
Где можно скачать CBuilder 5? C++
Совмещение DAO и DataGrid C++
C++ Можно ли на CBuilder 6 откомпилировать exe для Linux?
C++ Как эмулировать нажатие F3 в CBuilder?
C++ Тип функции в CBuilder
Indy 10 SSL и CBuilder 6 C++ Builder
Тетрис, превести из CBuilder в Qt C++ Qt
C++ Как научить IDE Cbuilder 6 понимать русский текст (массив строк с кириллицей преобразуется в знаки вопроса)?
Подключение Glut в CBuilder 6 OpenGL

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 03:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru