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

DAO и CBuilder - C++

Восстановить пароль Регистрация
 
Staser
Сообщений: n/a
26.05.2010, 13:41     DAO и CBuilder #1
Уважаемые программисты! Помогите разобраться, как же все-таки заставить
работать COM-билиотеку DAO на благо человечества?!!

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

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

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

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

//------------------------------------------------------

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!!!

e-mail: armylove@yandex.ru
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2010, 13:41     DAO и CBuilder
Посмотрите здесь:

C++ Определить, есть ли в массиве повторяющиеся значения.CBuilder
C++ Как открыть файл "xxx.mdb" технологией DAO
Где можно скачать CBuilder 5? C++
Совмещение DAO и DataGrid C++
C++ Можно ли на CBuilder 6 откомпилировать exe для Linux?
C++ Как эмулировать нажатие F3 в CBuilder?
C++ Тип функции в CBuilder
Тетрис, превести из CBuilder в Qt C++ Qt

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

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

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