Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание статической DLL 
:(
    Опции темы
AngelDominantes
Дата 27.7.2010, 10:18 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 29.5.2009

Репутация: нет
Всего: нет



всем доброго времени суток, сразу к делу:
при попытке создать статическую ДЛЛ возникает вот такая вот ошибка: [Linker Error] Error: Unresolved external 'Message(char *)' referenced from C:\BORLAND STUDIO PROJECTS\UNIT1.OBJ
текст DLL, заголовочного файла и тест приложения ниже:
DLL 
Код

#include <vcl.h>
#include <windows.h>
#include "MyDLL.h"
#pragma hdrstop

#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
    return 1;
}
void Message(char *s) {
    Application->MessageBox(s,"From DLL",IDOK);
}


MyDLL.h
Код

#if defined(BUILD_DLL)
# define DLL_EXP __declspec(dllexport)
#else
# if defined(BUILD_APP)
# define DLL_EXP __declspec(dllimport)
# else
# define DLL_EXP
# endif
#endif

DLL_EXP void Message(char *s);

Test programm
Код

#include "MyDLL.h"
#include "Unit1.h"
#include <vcl.h>
#include <stdio.h>
#pragma comment(lib, "Project1.lib")

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

    Message("Hello world");

}


Такое ощущение что не цепляется lib файл, даже если его добавить в проект руками результат тот же. . . грешу на настройки buildra юзаю DBS 2006
Заранее благодарен.
PM MAIL   Вверх
EnergoHokum
Дата 27.7.2010, 10:28 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



DLL -- dynamic linked library. Не находишь противоречие уже в самой формулировке: "статическая динамически подключаемая..."?


Это сообщение отредактировал(а) EnergoHokum - 27.7.2010, 10:33
PM MAIL ICQ   Вверх
AngelDominantes
Дата 27.7.2010, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 29.5.2009

Репутация: нет
Всего: нет



Существует еще и статическое связывание DLL


Это сообщение отредактировал(а) AngelDominantes - 27.7.2010, 10:50
PM MAIL   Вверх
Abyx
Дата 27.7.2010, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: нет
Всего: 10



AngelDominantes, это называется статический импорт из DLL
PM MAIL   Вверх
EnergoHokum
Дата 27.7.2010, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Цитата

Существует еще и статическое связывание DLL

Так ты-ж сам пишешь, что создаёшь и подключаешь не DLL, а вовсе даже lib. А статические и динамические библиотеки в потрохах сильно различаются.
PM MAIL ICQ   Вверх
AngelDominantes
Дата 27.7.2010, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 29.5.2009

Репутация: нет
Всего: нет



Так я выложил все потроха, программа использует функцию из ДЛЛ которая выводит в messageboxe "Hello world", чего может быть проще?! человек хоть раз столкнувшись с этим понял бы все с полувзгляда, но в итоге ни одного комментария по существу, какие то придирки к терминологии, это так модно нынче?
PM MAIL   Вверх
EnergoHokum
Дата 27.7.2010, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Цитата

какие то придирки к терминологии

Компилятор делает не то, что ты от него хочешь, а то, что ты ему говоришь. Поэтому вопросы терминологии должны быть прояснены до блеска. Это не религия какая-нить, где "чуда не случилось, т. к. прихожане плохо веровали".

Теперь по существу вопроса: когда ты создаёшь проект библиотеки -- ты вызываешь DLL Wizard, или Library?

DBS 2006 у меня нет, есть замшелый Builder 6. Да и тот -- на работе. Поэтому как уйду домой -- подсматривать будет вообще некуда.
PM MAIL ICQ   Вверх
Modul
Дата 27.7.2010, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



А ты случайно не забыл в папку проекта положить 2 файла:
myDLL.lib
myDLL.dll


А импорт кто будет добавлять в проект (это пример):

Код

#define DLLIMPORT extern "C" __declspec(dllimport)
DLLIMPORT int summa(int x);




Это сообщение отредактировал(а) Modul - 27.7.2010, 13:14
--------------------
I'll be back !
PM MAIL   Вверх
AngelDominantes
Дата 27.7.2010, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 29.5.2009

Репутация: нет
Всего: нет



Конечно DLL wizard, Алгоритм такой я создаю DLL, компилирую, lib файл созданной dll подключаю к программе, так же прописываю заголовочный файл от dll, и вызываю тупо функции в своей программе которые описаны в dll. . .
PM MAIL   Вверх
EnergoHokum
Дата 27.7.2010, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Ну, тогда filealyzer-ом посмотреть, есть ли в DLL экспорт нужной функции, им-же посмотреть, есть ли в *.lib описание этой функции. Если и там, и там всё в порядке -- ну, тогда не знаю, настройки IDE ковырять надо, может, в ней подключение как-то неочевидно делается...
PM MAIL ICQ   Вверх
AngelDominantes
Дата 27.7.2010, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 29.5.2009

Репутация: нет
Всего: нет



Цитата(Modul @ 27.7.2010,  13:03)
А ты случайно не забыл в папку проекта положить 2 файла:
myDLL.lib
myDLL.dll


А импорт кто будет добавлять в проект (это пример):

Код

#define DLLIMPORT extern "C" __declspec(dllimport)
DLLIMPORT int summa(int x);

я думал будет достаточно только Lib,  а импорт описан  в заголовочном файле dll или его еще и в основной проект нужно прописывать?
PM MAIL   Вверх
borisbn
Дата 27.7.2010, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Определены ли в dll и exe defin'ы BUILD_DLL и BUILD_APP соответственно ?
С каких пор Builder понимает 
Цитата

#pragma comment(lib, "Project1.lib")

Я закончил работать с версией 5.0, там нужно было в проект ( !!! ) добавлять lib-файл.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
AngelDominantes
Дата 27.7.2010, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 29.5.2009

Репутация: нет
Всего: нет



Так lib добавлен, даже если 
Код

#pragma comment(lib, "Project1.lib")

не работает я добавлял его вручную.
а смысл в exe определять 
Цитата(borisbn @  27.7.2010,  13:48 Найти цитируемый пост)
BUILD_DLL и BUILD_APP

если я подключаю заголовочный файл 
Код

#if defined(BUILD_DLL)
# define DLL_EXP __declspec(dllexport)
#else
# if defined(BUILD_APP)
# define DLL_EXP __declspec(dllimport)
# else
# define DLL_EXP
# endif
#endif
DLL_EXP void Message(char *s);

где они определены
PM MAIL   Вверх
bsa
Дата 27.7.2010, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



#pragma hdrstop лучше ставить стразу после #include <vcl.h>, который должен быть первой строкой - компилироваться будет быстрей
PM   Вверх
borisbn
Дата 27.7.2010, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



а смысл в exe определять только BUILD_APP, чтобы 
Цитата

DLL_EXP void Message(char *s);

стала
Цитата

__declspec(dllimport) void Message(char *s);



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1008 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.