Ссылка на неразрешенный внешний символ при использовании DLL - C (СИ)
Формулировка задачи:
Всем привет.
Подскажите пожалуйста, как работать с DLL...
Я создаю новый проект с разрешением dll, туда пишу такой код
Потом в другой проект пишу этот код:
И при запуске получается ошибка:
Ошибка
// myfirstdll.c
#include <stdio.h>
// Ключевое слово __declspec(dllexport)
// делает функцию экспортируемой
__declspec(dllexport) void Demo(char *str)
{
// Выводим на экран переданную функции Demo строку
printf(str);
}__declspec(dllimport) void Demo(char *str);
main()
{
Demo("Hello, World!\n");
}
LNK2019 ссылка на неразрешенный внешний символ "__declspec(dllimport) void __cdecl Demo(char *)" (__imp_?Demo@@YAXPAD@Z) в функции _main ConsoleApplication2
Решение задачи: «Ссылка на неразрешенный внешний символ при использовании DLL»
textual
Листинг программы
#include <windows.h>
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C"
{
#endif
void WINAPI DLL_EXPORT Demo(char *str);
#ifdef __cplusplus
}
#endif
Объяснение кода листинга программы
- Подключение заголовочного файла windows.h.
- Определение препроцессорной переменной BUILD_DLL, которая будет иметь значение 1, если библиотека собирается (например, с помощью утилиты g++ -shared), и 0 в противном случае.
- Определение макроса DLL_EXPORT с использованием __declspec(dllexport) в случае, если BUILD_DLL равно 1, и __declspec(dllimport) в противном случае.
- Внутренний блок (то есть, код, который будет выполняться только в библиотеке) начинается с инструкции #ifdef __cplusplus и заключен в фигурные скобки.
- Объявление функции-обработчика Demo с типом возвращаемого значения void и аргументом типа char *.
- Завершение внутреннего блока с помощью инструкции #ifdef __cplusplus и закрывающей фигурной скобки.
- Внутренний блок кода, который будет выполняться только вне библиотеки (то есть, в приложении, которое использует эту библиотеку), начинается с инструкции #ifdef __cplusplus и заключен в фигурные скобки.
- Внутренний блок кода, который будет выполняться только вне библиотеки (то есть, в приложении, которое использует эту библиотеку), заканчивается с помощью инструкции #ifdef __cplusplus и закрывающей фигурной скобки.