Ссылка на неразрешенный внешний символ при использовании 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

Объяснение кода листинга программы

  1. Подключение заголовочного файла windows.h.
  2. Определение препроцессорной переменной BUILD_DLL, которая будет иметь значение 1, если библиотека собирается (например, с помощью утилиты g++ -shared), и 0 в противном случае.
  3. Определение макроса DLL_EXPORT с использованием __declspec(dllexport) в случае, если BUILD_DLL равно 1, и __declspec(dllimport) в противном случае.
  4. Внутренний блок (то есть, код, который будет выполняться только в библиотеке) начинается с инструкции #ifdef __cplusplus и заключен в фигурные скобки.
  5. Объявление функции-обработчика Demo с типом возвращаемого значения void и аргументом типа char *.
  6. Завершение внутреннего блока с помощью инструкции #ifdef __cplusplus и закрывающей фигурной скобки.
  7. Внутренний блок кода, который будет выполняться только вне библиотеки (то есть, в приложении, которое использует эту библиотеку), начинается с инструкции #ifdef __cplusplus и заключен в фигурные скобки.
  8. Внутренний блок кода, который будет выполняться только вне библиотеки (то есть, в приложении, которое использует эту библиотеку), заканчивается с помощью инструкции #ifdef __cplusplus и закрывающей фигурной скобки.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.357 из 5
Похожие ответы