Могу ли я построить исполняемый файл как DLL?

0

Мне нужно создать 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);

На всякий случай я также включил файл заголовка в класс приложения. Мне интересно, почему эта функция не выглядит как экспорт? Что мне нужно сделать?

  • 0
    Вероятно, это легальная библиотека DLL, но есть ли в ней то, что вы хотите, или если она использует тот же набор инструментов, что и ваш другой проект, можно получить. Вы можете попробовать dumpbin /exports <nameofdll>
  • 1
    126 может исходить из отсутствующей зависимости. Смотрите этот ответ: stackoverflow.com/a/14362289/1374704
Показать ещё 5 комментариев
Теги:
dll
mfc
visual-studio-2010
exe

1 ответ

2
Лучший ответ

Первый:

__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.

  • 0
    спасибо, что сделал это Моя ошибка была в том, что функция не была объявлена с __declspec(dllexport) в файле cpp

Ещё вопросы

Сообщество Overcoder
Наверх
Меню