![]() |
|
|
![]()
|
|
| Лена |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Вот пришлось в первые столкнуться с написанием DLL
Функция в DLL должна уметь принять параметр, проверить, если такое значение в удаленной базе данных и вернуть его, если такой параметр есть, в противном случае вернуть NULL. Вот вариант DLL:
В DataModule1 настроено соединение. h файл DLL
Создала тестовое приложение. Добавила в него lib файл. Код тестового приложения:
При выполнении этого кода на первой же строке функции FindRecord выскакивает исключение (см.рис). Похоже, Дата Модуль, хоть он и находиться в DLL не создан. Как исправить положение? Где создавать и как засунуть это чертов Дата Модуль в DLL? Это сообщение отредактировал(а) Лена - 22.11.2006, 18:43 Присоединённый файл ( Кол-во скачиваний: 13 )
1.gif 12,39 Kb |
||||||
|
|||||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Если так:
то ошибка на рисунке: и курсор поподает сюда: __fastcall TDataModule1::TDataModule1(TComponent* Owner) : TDataModule(Owner) { } Это сообщение отредактировал(а) Лена - 22.11.2006, 19:16 Присоединённый файл ( Кол-во скачиваний: 10 )
1.gif 5,93 Kb |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Вот опытным путем пришла к такому решению. Вроде работает:
Такой подход правильный? Это надежно, или лучше как-то подругому делать? Это сообщение отредактировал(а) Лена - 22.11.2006, 20:04 |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Не совсем
Лена подходите к вопросу проще и исходя из принципов ООП. А из них следует, что Вы должны весь функционал засунуть в DataModule и весь код экспортируемой функции у Вас будет выглядеть следующим образом
А весь функционал будет в методе FindRecord. Тогда вот такие длинные цепочки DataModule1->ADOQuery1-> будут не нужны У ADOQuery1 в дизайне устновите Active в false В дизайне задане запрос с параметром select code from keys where code = :code Тогда сам метод упростится Добавлено @ 11:42 Ну и к тому же я практически не использовал статическую линковку dll. Обычно применял динамическую загрузку и при этом для передачи можно было спокойно использовать AnsiString вместо char*. Кстати AnsiString можно использовать и при статической линковке если пристыковывать к проектам библиотеку MEMMGR.LIB -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Понятно. Спасибо за разъяснения. На будущее учту замечания.
Я вчера вечером отдала такой вариант кода. Он будет нормально работать или все-таки обязательно переделать и отнести новый вариант?
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |