2016-08-11 4 views
0

Вот простой пример для DHCP клиента API, https://msdn.microsoft.com/en-us/library/windows/desktop/aa363345(v=vs.85).aspxDHCP клиент API C++ пример MSDN

Я работаю в Visual Studio 2012 с консольным приложением C++, то есть сбой, когда здание:

1> ------ Начало сборки: Проект: ConsoleApplication2, Конфигурация: Отладка Win32 ------

1> MSVCRTD.lib (crtexew.obj): ошибка LNK2019: неразрешенный внешний символ _WinMain @ 16 ссылка в функции ___tmainCRTStartup

1> D: \ зрительная работа место \ ConsoleApplication2 \ Debug \ ConsoleApplication2.exe: фатальная ошибка LNK1120: 1 неразрешенных внешних

Может кто-нибудь знает, как решить эту проблему ?, спасибо

+0

У вас нет «основного» в примере. –

ответ

0

Есть много хитов, когда Google -в этой ошибке. Here.

Там есть несоответствие между C код и VStudio типа проекта.

Точка входа вашего приложения, вероятно, int main(int argc, char **argv) (это одна из ее наиболее общих форм), которая в мире MS соответствует Консольное приложение.

Но MS определил другие типы приложений. Один из них - графический интерфейс (на основе окна), который не требует консоли. Для этого одна MS определила точку входа как: int CALLBACK WinMain(_In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow). Вы можете найти более подробную информацию об этом на MSDN.

При создании исполняемого файла приложения линкер должен знать, какой тип приложения имеет. Это задается параметром /SUBSYSTEM.

Это устанавливается при создании проекта на основе вашего выбора вашего (Visual C++):

  • Win32 Console Application
  • Win32 Project

И я думаю, последний по умолчанию.

Чтобы исправить ситуацию, вам нужно изменить настройку компоновщика в соответствии с вашим кодом (ну может быть и наоборот), но это было бы сложнее). Для того, чтобы сделать это, в VStudio IDE идти своим Свойства проекта ->Linker ->системы ->Subsystem и изменить его с Windows (/ Subsystem: WINDOWS) к консоли (/ SUBSYSTEM: CONSOLE).

Смежные вопросы