Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> Проблема C подключением Dll, Проблема c подключением Dll
IDeonisI
Вставить ник
сообщение 5:05:2008, 05:40
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 5
Регистрация: 24:02:2007
Пользователь №: 9 408
Специализация: Программист



Репутация: - 0 +


Всем привет! Подскажите как подключить не явно библиотеку Dll в среде Borland C++ 5 ? В менеджере проектов я подключил файл lib. Но функции этой библиотеки приложение так и не может увидеть. Хотя с явным подключением проблем нет.
Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 6)
shisik
Вставить ник
сообщение 5:05:2008, 10:49
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 62
Регистрация: 26:08:2007
Из: Харьков
Пользователь №: 12 480
Специализация: С/C++



Репутация: - 1 +


А файл h подключил?
Подняться вверх 
 
Сообщение #2
shisik
Вставить ник
сообщение 5:05:2008, 13:17
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 62
Регистрация: 26:08:2007
Из: Харьков
Пользователь №: 12 480
Специализация: С/C++



Репутация: - 1 +


Вот рабочий пример использования DLL. Пример простой, взят из учебника.

Возможно, ты указал #define BUILD_DLL(APP) после #include "MyLib.h" (имена могут отличаться, я привёл имена из примера).
Прикрепленные файлы
Прикрепленный файл  UseDLL.rar ( 369.15 килобайт ) Кол-во скачиваний: 1
 
Подняться вверх 
 
Сообщение #3
IDeonisI
Вставить ник
сообщение 7:05:2008, 05:07
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 5
Регистрация: 24:02:2007
Пользователь №: 9 408
Специализация: Программист



Репутация: - 0 +


Файла h как токового нет. Есть исходники библиотеки с кучей файлов h. Я в приложении просто для примера описал прототип только одной функции. Или необходимо описывать все функции библиотеки?
Подняться вверх 
 
Сообщение #4
shisik
Вставить ник
сообщение 7:05:2008, 10:07
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 62
Регистрация: 26:08:2007
Из: Харьков
Пользователь №: 12 480
Специализация: С/C++



Репутация: - 1 +


Все функции описывать не обязательно, описать достаточно только те, которые экспортируются из DLL. Важно, чтоб в DLL фунакция была описана как __declspec(dllexport), а в EXE __declspec(dllimport).
Подняться вверх 
 
Сообщение #5
brink
Вставить ник
сообщение 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
brink
Вставить ник
сообщение 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


Быстрый ответ  Ответить  Новая тема 

> Быстрый ответ
Полужирный
Курсив
Подчеркнутый
Вставить изображение
Смайлики
Цитата
Код
 
 Отправлять уведомления об ответах на e-mail |  Включить смайлики |  Добавить подпись
   

 

RSS Текстовая версия Сейчас: 16:05:2008 - 17:36
с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net