Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
5:05:2008, 05:40
|
|
Новенький ![]() Группа: Программист Сообщений: 5 Регистрация: 24:02:2007 Пользователь №: 9 408 Специализация: Программист Репутация: 0
|
Всем привет! Подскажите как подключить не явно библиотеку Dll в среде Borland C++ 5 ? В менеджере проектов я подключил файл lib. Но функции этой библиотеки приложение так и не может увидеть. Хотя с явным подключением проблем нет.
|
|
Сообщение
#1
|
|
![]() |
|
|
5:05:2008, 10:49
|
|
Новенький ![]() Группа: Программист Сообщений: 62 Регистрация: 26:08:2007 Из: Харьков Пользователь №: 12 480 Специализация: С/C++ Репутация: 1
|
А файл h подключил?
|
|
Сообщение
#2
|
|
|
|
5:05:2008, 13:17
|
|
Новенький ![]() Группа: Программист Сообщений: 62 Регистрация: 26:08:2007 Из: Харьков Пользователь №: 12 480 Специализация: С/C++ Репутация: 1
|
Вот рабочий пример использования DLL. Пример простой, взят из учебника.
Возможно, ты указал #define BUILD_DLL(APP) после #include "MyLib.h" (имена могут отличаться, я привёл имена из примера).
Прикрепленные файлы
|
|
Сообщение
#3
|
|
|
|
7:05:2008, 05:07
|
|
Новенький ![]() Группа: Программист Сообщений: 5 Регистрация: 24:02:2007 Пользователь №: 9 408 Специализация: Программист Репутация: 0
|
Файла h как токового нет. Есть исходники библиотеки с кучей файлов h. Я в приложении просто для примера описал прототип только одной функции. Или необходимо описывать все функции библиотеки?
|
|
Сообщение
#4
|
|
|
|
7:05:2008, 10:07
|
|
Новенький ![]() Группа: Программист Сообщений: 62 Регистрация: 26:08:2007 Из: Харьков Пользователь №: 12 480 Специализация: С/C++ Репутация: 1
|
Все функции описывать не обязательно, описать достаточно только те, которые экспортируются из DLL. Важно, чтоб в DLL фунакция была описана как __declspec(dllexport), а в EXE __declspec(dllimport).
|
|
Сообщение
#5
|
|
|
|
13:05:2008, 08:41
|
|
Новенький ![]() Группа: Программист Сообщений: 33 Регистрация: 17:04:2006 Из: Украина, Вишневый Пользователь №: 3 340 Репутация: 0
|
Добрый день.
У меня проблема следуещего характера. Есть Dll, при вызове функции из которой создается DataModule (вот так: DataModule = new TDataModule((TComponent *)NULL) ), на котором есть компоненты: TDCOMConnection; TClientDataSet; TDataSource. По идее они должны создатся автоматом? После создания модуля вызывается функция которая запускает TDCOMConnection но при попытке доступа к нему выдается ошибка: "Не был произведен вызов CoInitialize". Поготите разобраться, в чем же ошибка? Сообщение отредактировал brink - 13:05:2008, 09:34 |
|
Сообщение
#6
|
|
|
|
13:05:2008, 13:18
|
|
Новенький ![]() Группа: Программист Сообщений: 33 Регистрация: 17:04:2006 Из: Украина, Вишневый Пользователь №: 3 340 Репутация: 0
|
Проблему нашел, был немного невнимателен.
А дело в следующем. Когда ты создаешь обычное приложение-экзешник с формами, то при использовании COM-объектов, метод CoInitialize автоматически вызывается в Application.Initialize. Ну, а в DLL Application.Initialize не вызывается по-умолчанию и поэтому CoInitialize надо вызывать явно. Тоже самое надо проделать в отдельных неглавных потоках обычного приложения, которые используют COM или OLE механизмы. Если CoInitialize вызывается явно, то при завершении работы потока или DLL надо также вызывать CoUninitialize. |
|
Сообщение
#7
|
|
![]() |
|
Текстовая версия | Сейчас: 16:05:2008 - 17:36 |