Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Программист по неволе
24 / 24 / 8
Регистрация: 22.04.2015
Сообщений: 476
Записей в блоге: 1
1

"Unresolved external" при подключении созданной самим dll библиотеки

08.02.2016, 11:15. Показов 1975. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Попытка выполнения программы, к которой подключена библиотека dll выдает следующую ошибку:
[Linker Error] Unresolved external 'simpleGetVer()' referenced from C:\DLL CREATING\FIRST\UNIT1.OBJ

Код библиотеки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
 
#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
 
switch(fwdreason)
{
  case DLL_PROCESS_ATTACH:
    if (lpvReserved)
      MessageBox(NULL, "Process has attached"
      " to DLL (Static Load)",
      "DLLMain", MB_OK);
    else
      MessageBox(NULL, "Process has attached"
      " to DLL (Dynamic Load)",
      "DLLMain", MB_OK);
    break;
  case DLL_THREAD_ATTACH:
    MessageBox(NULL, "Thread has attached"
      " to DLL","DLLMain", MB_OK);
    break;
  case DLL_THREAD_DETACH:
    MessageBox(NULL, "Thread has detached"
    " to DLL","DLLMain", MB_OK);
    break;
  case DLL_PROCESS_DETACH:
    MessageBox(NULL, "Proccess has detached"
    " to DLL","DLLMain", MB_OK);
    break;
}
        return 1;
}
//---------------------------------------------------------------------------
const double version = 0.1;
double simpleGetVer()
{
  return version;
}
Код её заголовочного файла
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef _first.h
#define _first.h
 
#if defined(_cplusplus)
extern "C"
{
#endif
_declspec(dllexport) double simpleGetVer();
#if defined(_cplusplus)
}
#endif
 
#endif
Код проекта, к которому подключена библиотека
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "first.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Button1->Caption=FloatToStr(simpleGetVer());
}
//---------------------------------------------------------------------------
Файл .lib к проекту подключен.
В чем может быть причина?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2016, 11:15
Ответы с готовыми решениями:

Использование библиотеки BASS: Unresolved external при сборке проекта
Всем привет! Пишу медиа плеер на C++ Builder, подключаю библиотеку bass для эквалайзера: fx =...

Unresolved external symbol при подключении библиотеки MySQL
Здравствуйте, кто-то связывал МуSql и C++? Делаю все как написано в туториале ( подключаю...

Unresolved external symbol при подключении библиотеки MySQL
Описание проблемы: Пишу сервер для чата, когда стояла windows xp у меня был написан отдельный...

Unresolved external symbol при подключении библиотеки MySQL
#pragma comment(lib, &quot;C:/Program Files/MySQL/MySQL Server 5.6/lib/libmysql.lib&quot;) #include...

Ошибка при компановке DLL: new error LNK2001: unresolved external symbol 'struct _iobuf *
Подскжите, что делать? В С++.net можно объявить пространство имен и набор классов внутри него....

5
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
08.02.2016, 11:44 2
А extern "C" __declspec(dllexport) перед функцией double ... не пробовал добавлять? Я бы попробовал... .
1
Программист по неволе
24 / 24 / 8
Регистрация: 22.04.2015
Сообщений: 476
Записей в блоге: 1
08.02.2016, 11:59  [ТС] 3
Цитата Сообщение от nick42 Посмотреть сообщение
не пробовал добавлять? Я бы попробовал... .
Я так понял в код самой библиотеки надо добавить?
Если да, то добавил. Безрезультатно.

Добавлено через 5 минут
Цитата Сообщение от nick42 Посмотреть сообщение
А extern "C" __declspec(dllexport) перед функцией double ... не пробовал добавлять? Я бы попробовал... .
Извиняюсь, не сразу понял что требовалось. Все работает. Спасибо.
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
08.02.2016, 12:06 4
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

Добавлять по разному можно. Вот для примера (из рабочего проекта) кусок кода в .cpp для двух функций записи-чтения в файл__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define FUNC extern "C" void __stdcall
#define DECL extern "C" __declspec(dllexport) void __stdcall
 
 FUNC PutIntA(int &aa)  {
   if (mIni) {
     int prm = aa ;
     mIni->WriteInteger("Main","Int",prm) ;
   }
 }
 DECL PutIntA(int &);
 FUNC GetIntA(int &aa)  {
   if (mIni) {
     int prm = mIni->ReadInteger("Main","Int",-1) ;
     aa = prm;
   } 
 }
 DECL GetIntA(int &);
Добавлено через 57 секунд
П.С. Пока писал - добавление возникло...
1
Программист по неволе
24 / 24 / 8
Регистрация: 22.04.2015
Сообщений: 476
Записей в блоге: 1
08.02.2016, 12:21  [ТС] 5
nick42, А не подскажите тогда, как правильно объявить переменные в заголовочной файле?
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
08.02.2016, 12:28 6
За подсказки ответственности не несу (сам двоечник).
Вот примерчик для четырех функций типа void__
C++
1
2
3
4
5
6
7
8
9
//---------------------- Unit2.h -----------------------------------------
extern "C"
{
 void __cdecl On_Send_Dll_ID_Name(char *Name);
 void __cdecl On_Start(void*,void*,bool,int,char*,char*,int*);
 void __cdecl On_Menu_Select(unsigned int mId);
 void __cdecl On_Exit();
}
//--------------------------------------------------------------------------
Впрочем для ДЛЛ заголовочный файл - это излишество, по моему. Файл .def иногда полезней бывает:
XML
1
2
3
4
5
6
7
LIBRARY SDPLUG
EXPORTS
    A = ___CPPdebugHook @1 NONAME
    On_Send_Dll_ID_Name = _On_Send_Dll_ID_Name @2
    On_Start = _On_Start @3
    On_Menu_Select = _On_Menu_Select @4
    On_Exit = _On_Exit @5
1
08.02.2016, 12:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2016, 12:28
Помогаю со студенческими работами здесь

Ошибка при подключении заголовочного файла: "error LNK2019: unresolved external symbol"
Добрый день. Я что то не могу разобраться как работают эти заголовки на с++(вижуал студия). ...

DLL. Invalid compiler directive: 'EXTERNAL' при подключении
Ребята помогите, при подключении библиотеки выдает ошибку Unit1.pas(39): Invalid compiler...

Внешняя dll libnodave: Unresolved external постоянно
Не могу заставить работать в С++Builder6. В Delphi6 все работает, я уже и программу почти доделал....

Ошибка при подключении библиотеки Dll
Пши программу, которая через Dll общается с другой программой. О Dll известно только одно: названия...

Ошибки при компоновке "LNK2001: unresolved external symbol" и "LNK2019: unresolved external symbol"
При линковке дебаг экзешника, используя старый VS toolchain у меня вылазят такие ошибки: ...

Ошибка при подключении своей dll-библиотеки.
Написал, раскидал как написано ....dll и ....lib и ....h При компиляции головного проекта...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru