Ссылка на неразрешенный внешний символ при использовании 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 и закрывающей фигурной скобки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д