• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Проблема C подключением Dll

  • Автор темы IDeonisI
  • Дата начала
Статус
Закрыто для дальнейших ответов.
I

IDeonisI

Всем привет! Подскажите как подключить не явно библиотеку Dll в среде Borland C++ 5 ? В менеджере проектов я подключил файл lib. Но функции этой библиотеки приложение так и не может увидеть. Хотя с явным подключением проблем нет.
 
S

shisik

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

Возможно, ты указал #define BUILD_DLL(APP) после #include "MyLib.h" (имена могут отличаться, я привёл имена из примера).
 

Вложения

  • UseDLL.rar
    369,2 КБ · Просмотры: 142
I

IDeonisI

Файла h как токового нет. Есть исходники библиотеки с кучей файлов h. Я в приложении просто для примера описал прототип только одной функции. Или необходимо описывать все функции библиотеки?
 
S

shisik

Все функции описывать не обязательно, описать достаточно только те, которые экспортируются из DLL. Важно, чтоб в DLL фунакция была описана как __declspec(dllexport), а в EXE __declspec(dllimport).
 
B

brink

Добрый день.

У меня проблема следуещего характера. Есть Dll, при вызове функции из которой создается DataModule (вот так: DataModule = new TDataModule((TComponent *)NULL) ), на котором есть компоненты:
TDCOMConnection;
TClientDataSet;
TDataSource.
По идее они должны создатся автоматом?
После создания модуля вызывается функция которая запускает TDCOMConnection но при попытке доступа к нему выдается ошибка: "Не был произведен вызов CoInitialize".
Поготите разобраться, в чем же ошибка?
 
B

brink

Проблему нашел, был немного невнимателен.
А дело в следующем. Когда ты создаешь обычное приложение-экзешник с формами, то при использовании COM-объектов, метод CoInitialize автоматически вызывается в Application.Initialize. Ну, а в DLL Application.Initialize не вызывается по-умолчанию и поэтому CoInitialize надо вызывать явно. Тоже самое надо проделать в отдельных неглавных потоках обычного приложения, которые используют COM или OLE механизмы. Если CoInitialize вызывается явно, то при завершении работы потока или DLL надо также вызывать CoUninitialize.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!