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

Ваш аккаунт

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

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

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

как правильно создать DLL в С++ Builder'е

4.5K
18 декабря 2004 года
protz
34 / / 18.12.2004
никак не могу создать работоспособную DLL в билдере. Сколько не стараюсь, всё равно не работает!
Сначала расскажите, как создать заголовочный файл для DLL'ки, что в этот заголовочный файл надо писать?
Заранее балгодарен...
310
18 декабря 2004 года
fellow
853 / / 17.03.2003
Пробовал воспользоваться стандартным "мастером" для создания проекта для DLL?
4.5K
19 декабря 2004 года
protz
34 / / 18.12.2004
Цитата:
Originally posted by fellow
Пробовал воспользоваться стандартным "мастером" для создания проекта для DLL?



Да, я пробовал создавать DLL стандартным мастером, DLL'а создалась, создался и .LIB-файл, т. е. всё создалось...
В общем, допустим есть DLL'ка, там написано:
///////////////////////////////////////////
#include <vcl.h>
#include <windows.h>
#pragma hdrstop

void func()
{
ShowMessage("It is working");
}
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
///////////////////////////////////////////////
(комментарии я выкинул)
в header'е написано:
///////////////////////////////////////////////
#ifdef _BUILDING_THE_DLL
#define _EXPORT_TYPE _export
#else
#define _EXPORT_TYPE _import
#enif
void _EXPORT_TYPE func();
////////////////////////////////////////////////
(правда я не занаю, что означают все эти препроцессорные диреутивы, прочитал прсто где-то,
что писать надо вот так, ну вот и написал...)
Выполнил команду Project->Build, получились файлы DLL.dll, DLL.lib и ещё некоторые.
В EXE-шнике, использующем эту DLL-ку я написал:
/////////////////////////////////////////////////
#pragma hdrstop
#include "DLL.h"
#pragma argsused
int main(int argc, char* argv[])
{
func();
return 0;
}
/////////////////////////////////////////////////
(заголовочный файл DLL'и у меня называется DLL.h
LIB-файл наз. DLL.lib , сама DLL'ка называется
DLL.dll )
К консольному проекту, использующему DLL'у, я добавил файл DLL.lib (командой Project->Add toproject и т. д.
Пытаюсь собрать этот самый консольный проект, но компилятор выдаёт ошибку
[Linker Error] Unresolved external 'func()' referenced from C:\DOCUMENTS AND SETTINGS\USER\&#208;&#192;&#193;&#206;&#215;&#200;&#201; &#209;&#210;&#206;&#203;\PROGRAMME\UNIT1.OBJ
Чё за хрень, прости за выражение?
Прошу тебя, помоги разобраться, PEASE!

310
19 декабря 2004 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by protz


Да, я пробовал создавать DLL стандартным мастером, DLL'а создалась, создался и .LIB-файл, т. е. всё создалось...
В общем, допустим есть DLL'ка, там написано:
....................
(комментарии я выкинул)
в header'е написано:
....................
(правда я не занаю, что означают все эти препроцессорные диреутивы, прочитал прсто где-то,
что писать надо вот так, ну вот и написал...)
Выполнил команду Project->Build, получились файлы DLL.dll, DLL.lib и ещё некоторые.
В EXE-шнике, использующем эту DLL-ку я написал:
....................


Если пользовался стандартным мастером, то он уже всё сделал сам, как надо, ничего им созданное исправлять нет необходимости. Посмотри прилагающийся пример, и тебе всё станет понятно.

4.5K
19 декабря 2004 года
protz
34 / / 18.12.2004
Цитата:
Originally posted by fellow

Если пользовался стандартным мастером, то он уже всё сделал сам, как надо, ничего им созданное исправлять нет необходимости. Посмотри прилагающийся пример, и тебе всё станет понятно.

4.5K
19 декабря 2004 года
protz
34 / / 18.12.2004
Цитата:
Originally posted by fellow

Если пользовался стандартным мастером, то он уже всё сделал сам, как надо, ничего им созданное исправлять нет необходимости. Посмотри прилагающийся пример, и тебе всё станет понятно.


Огромное спасибо за пример, не знаю даже как вас благодарить, но если у меня всё-таки возникнут проблемы, то я опять к Вам обращусь, ладно?
А пока спасибо за помощь!

246
20 декабря 2004 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by protz

В общем, допустим есть DLL'ка, там написано:
...
#ifdef _BUILDING_THE_DLL
#define _EXPORT_TYPE _export
#else
#define _EXPORT_TYPE _import
#enif
void _EXPORT_TYPE func();
...
(правда я не занаю, что означают все эти препроцессорные диреутивы, прочитал прсто где-то,
что писать надо вот так, ну вот и написал
...


Это означает, что если компилишь dll тебе надо добавить #define _BUILDING_THE_DLL(или в Projects->Options->Directories/Conditionals->/Conditionals defines), а когда компилишь ехе ничего делать не надо. Тогда линкер все поставит на "место" в dll func пойдет в секцию export, а в ехе в import...

4.5K
20 декабря 2004 года
protz
34 / / 18.12.2004
Цитата:
Originally posted by GIZMO

Это означает, что если компилишь dll тебе надо добавить #define _BUILDING_THE_DLL(или в Projects->Options->Directories/Conditionals->/Conditionals defines), а когда компилишь ехе ничего делать не надо. Тогда линкер все поставит на "место" в dll func пойдет в секцию export, а в ехе в import...


Большое спасибо за помощь, но всё таки почему у меня появляется ошибка такая:
[Linker Error] Unresolved external 'func()' referenced from C:\DOCUMENTS AND SETTINGS\USER\Рабочий стол\PROGRAMME\UNIT1.OBJ
Да, кстати, у меня Builder 6.0...
И ещё один вопросец: когда надо и когда не надо ставить галочку напротив Generate import library в Project->Options->Linker? Что даст мне эта галочка, как всё это хозяйство использовать?

4.5K
21 декабря 2004 года
protz
34 / / 18.12.2004
Цитата:
Originally posted by protz

Большое спасибо за помощь, но всё таки почему у меня появляется ошибка такая:
[Linker Error] Unresolved external 'func()' referenced from C:\DOCUMENTS AND SETTINGS\USER\Рабочий стол\PROGRAMME\UNIT1.OBJ
Да, кстати, у меня Builder 6.0...
И ещё один вопросец: когда надо и когда не надо ставить галочку напротив Generate import library в Project->Options->Linker? Что даст мне эта галочка, как всё это хозяйство использовать?


Дорогие товарищи, дамы и господа, леди и джем-пелбмени!
Повторяю свой вопрос, поверьте, для мня это очень важно!
Итак, ответьте пожалуйста,
почему у меня появляется ошибка такая, когда ю пытаюсь собрать проект, использующий DLL-ку:
[Linker Error] Unresolved external 'func()' referenced from C:\DOCUMENTS AND SETTINGS\USER\Рабочий стол\PROGRAMME\UNIT1.OBJ
Да, кстати, у меня Builder 6.0...
И ещё один вопросец: когда надо и когда не надо ставить галочку напротив Generate import library в Project->Options->Linker? Что даст мне эта галочка, как всё это хозяйство использовать?

310
22 декабря 2004 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by protz

Дорогие товарищи, дамы и господа, леди и джем-пелбмени!
Повторяю свой вопрос, поверьте, для мня это очень важно!
Итак, ответьте пожалуйста,
почему у меня появляется ошибка такая, когда ю пытаюсь собрать проект, использующий DLL-ку:
[Linker Error] Unresolved external 'func()' referenced from C:\DOCUMENTS AND SETTINGS\USER\Рабочий стол\PROGRAMME\UNIT1.OBJ
Да, кстати, у меня Builder 6.0...
И ещё один вопросец: когда надо и когда не надо ставить галочку напротив Generate import library в Project->Options->Linker? Что даст мне эта галочка, как всё это хозяйство использовать?


Коротко: RTFM.
Развёрнуто: смотри справку. В диалоге имеется кнопка её вызова, там написано нормальным английским языком, для чего эта "галочка" нужна.

Пример, который я положил, компилируется? Линкуется? Работает? Если ответ на все три вопроса положительный - изучай его внутренности. Если отрицательный - ищи, где напортачил. Может, билдер криво установился?

4.1K
22 декабря 2004 года
Olegg
48 / / 17.09.2004
Цитата:
Originally posted by protz
никак не могу создать работоспособную DLL в билдере. Сколько не стараюсь, всё равно не работает!
Сначала расскажите, как создать заголовочный файл для DLL'ки, что в этот заголовочный файл надо писать?
Заранее балгодарен...



Вот дока, по ней я получил первый опыт DLL в C++

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог