C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
вызов ADO из DLL
slavic
Отправлено: 21.03.2007, 23:52


Ученик-кочегар

Группа: Участник
Сообщений: 6



сделал dll-ку, в которой есть функция использующая ADOQuery, ADOConnection, ADOTable.

не без трудностей, но скомпилировал.

Теперь подгружаю ее из другой программы, пишет Access violation... sad.gif

В чем может быть дело?

1) статически функция, использующая адо, работала. т.е. подобных ошибок не возникало. так что сама функция абсолютна верна.
2) в данный момент к dll-ке при построении добавлены библиотеки (vcl.lib, odbc32.dll, adortl.lib). Может еще надо добавить?
3) dll-ка подгружается динамически (loadlibrary)
4) дело точно в адо, т.к. до места с адо все из длл-ки выполняется.
olegenty
Отправлено: 22.03.2007, 09:40


Ветеран

Группа: Модератор
Сообщений: 2412



Для ответа недостаточно данных. включи отладчик и посмотри, где AV происходит. Тогда всё станет понятно.
Guest
Отправлено: 22.03.2007, 11:47


Не зарегистрирован







по-моему, всё понятно.
в виде приложения все работало, в длл-ке перестало.

ошибка на компонентах АДО.

что дописать? как исправить?
olegenty
Отправлено: 23.03.2007, 08:47


Ветеран

Группа: Модератор
Сообщений: 2412



сорцы, может, в студию? а то тут телепатов нет.
Ramzay
Отправлено: 23.03.2007, 21:03


Дежурный стрелочник

Группа: Участник
Сообщений: 31



Трудно так сказать, информации маловато. Но то что должно работать — это точно. У меня была похожая проблема, победил так:

CODE
CoInitialize(NULL);
ADOQuery=new TADOQuery(NULL);
Admin
Отправлено: 23.03.2007, 21:18


Владимир

Группа: Администратор
Сообщений: 1190



QUOTE
сделал dll-ку, в которой есть функция использующая ADOQuery, ADOConnection, ADOTable.


При использовании ADOQuery, ADOConnection, ADOTable — где они
создаются ?
olegenty
Отправлено: 24.03.2007, 08:06


Ветеран

Группа: Модератор
Сообщений: 2412



на модуле данных smile.gif
который не проинициализирован (в смысле — не создан smile.gif )
slavic
Отправлено: 24.03.2007, 09:42


Ученик-кочегар

Группа: Участник
Сообщений: 6



Проблема решилась. Нужно проверить 2 вещи.

1. Добавить выделение памяти для объектов
TADOConnection *ADOConnection1=new TADOConnection(NULL);
TADOQuery *ADOQuery1=new TADOQuery(NULL);

2. Если потребуется добавить еще и инициализацию ком-объекта
CoInitialize(NULL);


Спасибо всем!

Вернуться в Работа с базами данных в C++Builder