Мне нужно создать dll, который содержит вещи, которые у меня есть в моем исполняемом проекте в visual studio 2010. Я понял, вместо создания проекта dll, я могу просто изменить конфигурацию проекта в свойствах проекта >> General >> 'configuration type' to ' dll ', и он строит отлично. Он создает dll. Я добавил дополнительные файлы.h/.cpp, которые содержат функции экспорта, которые я хочу в dll.
Моя первая проблема заключается в том, что это законная dll? Я пытаюсь загрузить его с помощью LoadLibrary()
но я получаю код ошибки 126 (указанный модуль не может быть найден), хотя dll находится в каталоге проекта (то же, что и исполняемый файл). Мне просто интересно, связано ли это с тем, что это может быть не полная квалификация dll по какой-либо причине? Мой проект exe - проект MFC.
** Обновление **
Благодаря комментариям я могу теперь успешно загрузить DLL - это проблема с зависимостями. Однако GetProcAddress()
не возвращает действительный указатель для функции экспорта. dumpbin/exports
показывает, что dll не имеет функций экспорта!
Поэтому я добавил только файлы.h/cpp к исходному проекту, который теперь имеет простую фиктивную функцию для экспорта.
__declspec(dllexport) int MakeDouble(int value);
На всякий случай я также включил файл заголовка в класс приложения. Мне интересно, почему эта функция не выглядит как экспорт? Что мне нужно сделать?
Первый:
__declspec(dllexport) int MakeDouble(int value);
Объявление функции должно иметь ту же подпись, что и определение, и, разумеется, функция должна иметь определение (при простом return 0;
должно работать)
Во-вторых:
Имя экспортируемой функции украшено красивыми странными символами, вы должны использовать extern "C" (или MS файл stdcall +.def):
//.h
extern "C" __declspec(dllexport) int MakeDouble(int value);
//.cpp
extern "C" __declspec(dllexport) int MakeDouble(int value) {
return 0;
}
Вы также должны проверить свойства проекта:
Configuration Properties -> C/C++ -> Code Generation -> Runtime Library
Убедитесь, что значение содержит слово DLL
.
__declspec(dllexport)
в файле cpp
dumpbin /exports <nameofdll>