Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

BCB 2006 проблема с DLL

7.3K
08 августа 2006 года
H010d Freeze
143 / / 08.08.2006
Всем привет!!!

Проблема проста и похожа на очередной баг в новом билдере.
В проекте динамической библиотеки билдер не определяет макрос __DLL__, хотя должен (__DLL__ является предопределенным для DLL).
В BCB 6 с этим все в порядке....

Может кто сталкивался....

BCB 2006 + 2-й update + все 6 hotfix'ов
6.8K
08 августа 2006 года
Romikgy
84 / / 28.04.2005
[QUOTE=H010d Freeze]Всем привет!!!

Проблема проста и похожа на очередной баг в новом билдере.
В проекте динамической библиотеки билдер не определяет макрос __DLL__, хотя должен (__DLL__ является предопределенным для DLL).
В BCB 6 с этим все в порядке....

Может кто сталкивался....

BCB 2006 + 2-й update + все 6 hotfix'ов[/QUOTE]
А че без этого макроса плохо живется?
7.3K
09 августа 2006 года
H010d Freeze
143 / / 08.08.2006
Цитата:

А че без этого макроса плохо живется?



Не то, что плохо.... бывает полезно, например приведенный ниже заголовочный файл можно использовать в DLL для экспорта функции, а в EXE для импорта.

Код:
#ifndef MainH
#define MainH

namespace TMHook
{

//---------------------------------------------------------------------------

#ifdef __DLL__
  #define DLL_EI __declspec(dllexport)
#else
  #define DLL_EI __declspec(dllimport)
#endif

#ifdef __cplusplus
  #define CALL_CONV       extern "C"
#else
  #define CALL_CONV
#endif

//---------------------------------------------------------------------------

CALL_CONV DLL_EI LRESULT __stdcall CALLBACK TMKbdProc(int code, WPARAM wParam, LPARAM lParam);

//---------------------------------------------------------------------------

} //end of namespace TMHook
using namespace TMHook;

#endif
6.8K
09 августа 2006 года
Romikgy
84 / / 28.04.2005
Так в чем проблема? Что этот код не работает?
7.3K
09 августа 2006 года
H010d Freeze
143 / / 08.08.2006
[QUOTE=Romikgy]Так в чем проблема? Что этот код не работает?[/QUOTE]

В том и проблема, что для проекта DLL билдер почему-то не определяет __DLL__, и функция не экспортируется, ибо DLL_EI получается равным __declspec(dllimport).

Конечно можно в main.cpp сделать так:
 
Код:
#define __DLL__
include "main.h"
...

Но это гнило...
6.8K
09 августа 2006 года
Romikgy
84 / / 28.04.2005
дык это определения имхо твое а не внутреностей билдера, или я не прав?

PS чет не встречал я его нигде :(
7.3K
09 августа 2006 года
H010d Freeze
143 / / 08.08.2006
DLL_EI и CALL_CONV - мои ....
А вот __DLL__ - предопределенный макрос билдера
6.8K
09 августа 2006 года
Romikgy
84 / / 28.04.2005
файл stdwind.h
#if defined(_MSC_VER)
# if defined(_WINDLL) && !defined(__DLL__)
# define __DLL__ 1
# endif
# if !defined(_export)
# define _export __export
# endif
#endif
определен этот DLL
6.8K
09 августа 2006 года
Romikgy
84 / / 28.04.2005
а #include <windows.h> юзаешь ?
7.3K
09 августа 2006 года
H010d Freeze
143 / / 08.08.2006
#include <windows.h> юзаю само собой :)

только вот для предопределенных макросов не нужны никакие инклуды, это как __FILE__, __LINE__, __DATE__, они просто особым образом обрабатываются компилятором.... как будто для них был #define, но никакой #define не нужен

Файла stdwind.h у меня ваще нет, но в любом случае судя по всему тот текст для внутренних заморочек...
6.8K
09 августа 2006 года
Romikgy
84 / / 28.04.2005
Нужны и они юзаются, иначе ничего работать не будет
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог