Как скомпилировать C ++ DLL с использованием Visual Studio? - PullRequest
4 голосов
/ 08 октября 2011

У меня есть несколько классов C ++, которые я хотел бы скомпилировать в файл dll. Когда я пытаюсь скомпилировать проект, я получаю неразрешенную внешнюю ошибку символа:

  1. ошибка LNK2019: неразрешенный символ _WinMain @ 16, указанный в функции tmainCRTStartup
  2. фатальная ошибка LNK1120: 1 неразрешенная внешняя

Это то, что я сделал до сих пор:

Я только что создал новый проект win32, выбрал dll и пустой проект. Затем я скопировал все файлы h и cpp в каталог и добавил их в проект.

Кроме того, я добавил файл "DllMain.cpp", содержащий этот код:

#include <windows.h>

BOOL APIENTRY DllMain( HANDLE hModule, 
                   DWORD  ul_reason_for_call, 
                   LPVOID lpReserved
                 )
{
    return TRUE;
}

Ответы [ 3 ]

3 голосов
/ 08 октября 2011

По какой-то причине проект был настроен на сборку .exe.

Но вы можете легко исправить свой проект. Откройте диалоговое окно свойств и перейдите к «Свойства конфигурации / Общие». Справа найдите элемент «Тип конфигурации» и измените его с «Приложение» на «Динамическая библиотека».

Также имейте в виду, что вам нужно изменить это во всех конфигурациях (т.е. отладка и выпуск).

1 голос
/ 08 октября 2011

Когда вы создаете новый проект приложения Win32, выберите «Настройки приложения» в мастере и выберите «DLL» в качестве типа приложения. Это начнется с пустой DllMain.

Вы говорите, что сделали это, но тогда не следует искать WinMain. Чтобы проверить, действительно ли вы создаете DLL, посмотрите в настройках проекта -> Общие и проверьте, что:

  1. «Тип конфигурации» - «Динамическая библиотека (.dll)»
  2. Использование MFC установлено на «Использовать стандартные библиотеки Windows»
  3. Использование ATL - "Не использовать ATL"
1 голос
/ 08 октября 2011

Эта ссылка может помочь вам http://msdn.microsoft.com/en-us/library/799kze2z(v=vs.80).aspx, а также проверьте настройки компоновщика в диалоговом окне свойств проекта. Если вы используете дополнительные библиотеки, убедитесь, что их пути заданы на вкладке компоновщика.

...