Ссылка на библиотеку DLL, которую я создал

#c #dll #static

#c #dll #статический

Вопрос:

Я пытаюсь создать свою собственную библиотеку DLL, а затем заставить другой проект загружать ее статически. Мой файл DLL содержит как файл заголовка (называемый HelloFunc.h), так и:

 #include <stdio.h>
extern "C"
{
    _declspec(dllexport) void HelloFromDll();
}
  

И файл c (называемый HelloFunc.cpp ):

 #include <stdio.h>
extern "C"
{
    _declspec(dllexport) void HelloFromDll()
    {
        printf("Hello DLL. n");
    }
}
  

После сборки проекта была создана библиотека объектных файлов (.lib).
Затем в моем другом проекте я попытался связать с ней статически.
В компоновщике -> Ввод -> Дополнительные зависимости я добавил свою библиотеку (я поместил ее в каталог моего нового проекта), а затем в компоновщике -> Ввод -> Командная строка я увидел, что она действительно связана с ней.

Однако, когда я попытался вызвать функцию HelloFromDll () в моем новом коде, ошибка говорит о том, что она не идентифицирована. Обратите внимание, что я также включил «HelloFunc.h», но ошибка говорит о том, что исходный файл не удалось открыть.

Я немного потерялся и не знаю, что я сделал не так. Любая помощь будет оценена 🙂

Ответ №1:

  1. Вы должны указать __declspec(dllimport) вместо __declspec(dllexport) при импорте библиотеки.

  2. Какое именно сообщение об ошибке вы получили?

[Отредактировано]

  1. При компиляции библиотеки DLL вы указываете __declspec(dllexport) . Когда вы компилируете приложение, которое импортирует библиотеку DLL, вы указываете __declspec(dllimport) .

  2. Проблема в том, что компилятор не может найти HelloFunc.h: Просто скопируйте HelloFunc.h в каталог вашего нового проекта.

Комментарии:

1. 1. Где я должен это указать? В моей DLL я указал __declspec(dllexport), должен ли я изменить его на __declspec (dllimport)? (Это кажется неправильным, потому что я экспортирую эту библиотеку). Должен ли я использовать __declspec (dllimport) где-нибудь в моем клиенте?

2. 2. Мои ошибки: — Ошибка 1 ошибка C1083: не удается открыть включаемый файл: ‘HelloFunc.h’: нет такого файла или каталога C:UsersMedocumentsvisual studio 2010 Projects StaticLoading StaticLoadingStaticLoading.c 2 — 2 IntelliSense: не удается открыть исходный файл «HelloFunc.h» c:usersMedocumentsvisual studio 2010 projects staticloadingstaticloadingstaticloading.c 2 — 3 IntelliSense: идентификатор «HelloFromDll» не определен c:usersMedocumentsvisual studio 2010 projects staticloadingstaticloadingstaticloading.c 6

3. @user3497668 Пожалуйста, не задавайте вопрос в комментариях к ответу. Подробные сообщения об ошибках должны быть в вопросе

Ответ №2:

Убедитесь, что ваш клиент и библиотека были скомпилированы в одном и том же режиме (debug или release). Это обычное узкое место.

Комментарии:

1. К сожалению, нет, библиотека скомпилирована в release, и я не могу скомпилировать клиент из-за ошибок. Похоже, я неправильно связал библиотеку, хотя она распознает in в командной строке, поэтому я не могу указать на проблему.