2014-11-05 3 views
0

Я пытался опросить доступные устройства на компьютере под управлением Windows с помощью этого примера кода от Microsoft. Но есть ошибки ссылок, которые связаны с _main().Ошибка связи Windows VC++ 2010 _main

#include <stdio.h> 
#include <windows.h> 
#include <setupapi.h> 
#include <devguid.h> 
#include <regstr.h> 

    int main(int argc, char *argv[ ], char *envp[ ]) 
    { 
    HDEVINFO hDevInfo; 
    SP_DEVINFO_DATA DeviceInfoData; 
    DWORD i; 

    // Create a HDEVINFO with all present devices. 
    hDevInfo = SetupDiGetClassDevs(NULL, 
     0, // Enumerator 
     0, 
     DIGCF_PRESENT | DIGCF_ALLCLASSES); 

    if (hDevInfo == INVALID_HANDLE_VALUE) 
    { 
     // Insert error handling here. 
     return 1; 
    } 

    // Enumerate through all devices in Set. 

    DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); 
    for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i, 
     &DeviceInfoData);i++) 
    { 
     DWORD DataT; 
     LPTSTR buffer = NULL; 
     DWORD buffersize = 0; 

     // 
     // Call function with null to begin with, 
     // then use the returned buffer size (doubled) 
     // to Alloc the buffer. Keep calling until 
     // success or an unknown failure. 
     // 
     // Double the returned buffersize to correct 
     // for underlying legacy CM functions that 
     // return an incorrect buffersize value on 
     // DBCS/MBCS systems. 
     // 
     while (!SetupDiGetDeviceRegistryProperty(
      hDevInfo, 
      &DeviceInfoData, 
      SPDRP_DEVICEDESC, 
      &DataT, 
      (PBYTE)buffer, 
      buffersize, 
      &buffersize)) 
     { 
      if (GetLastError() == 
       ERROR_INSUFFICIENT_BUFFER) 
      { 
       // Change the buffer size. 
       if (buffer) LocalFree(buffer); 
       // Double the size to avoid problems on 
       // W2k MBCS systems per KB 888609. 
       buffer = LocalAlloc(LPTR,buffersize * 2); 
      } 
      else 
      { 
       // Insert error handling here. 
       break; 
      } 
     } 

     printf("Result:[%s]\n",buffer); 

     if (buffer) LocalFree(buffer); 
    } 


    if (GetLastError()!=NO_ERROR && 
     GetLastError()!=ERROR_NO_MORE_ITEMS) 
    { 
     // Insert error handling here. 
     return 1; 
    } 

    // Cleanup 
    SetupDiDestroyDeviceInfoList(hDevInfo); 

    return 0; 

}

По некоторым причинам, есть ошибки ссылка:

1>device.obj : error LNK2019: unresolved external symbol [email protected] referenced in function _main 
1>device.obj : error LNK2019: unresolved external symbol [email protected] referenced in function _main 
1>device.obj : error LNK2019: unresolved external symbol [email protected] referenced in function _main 
1>device.obj : error LNK2019: unresolved external symbol [email protected] referenced in function _main 
1>c:\users\visual studio 2010\Projects\usb\Debug\usb.exe : fatal error LNK1120: 4 unresolved externals 

Что они собираются? Нет _main() вообще.

+0

Вы связываетесь с Setupapi.lib как [документация] (http://msdn.microsoft.com/en-us/library/windows/hardware/ff551069%28v=vs.85%29.aspx) говорит, что вы нужно? –

+0

Я не уверен, какой из ста предыдущих вопросов, связанных с этой же ошибкой, я должен использовать в качестве дубликата, чтобы закрыть это. См. «Связанный» список справа; любой из них мог бы объяснить, почему происходит этот тип ошибки, который расскажет вам, где искать его решение. Пожалуйста, сделайте хотя бы * основное исследование *, включая хотя бы элементарный поиск сообщения об ошибке, прежде чем размещать здесь вопрос. –

+0

Да, я добавил SetupApi.h для Windows 7.1 SDK в C/C++ Directory и SetupApi.lib для компоновщика. Но проблема остается. – visitor99999

ответ

0

Прежде всего, ошибки компоновщика не связаны с отсутствием main, но и о других функциях, которые называются (называются) от main.

Функции, которые вы упомянули в ошибках компоновщика, находятся в библиотеке: Setupapi.lib, и вам нужно включить его в настройки компоновщика (Вход) вашего проекта.

Почему это сработало на VS повторно открыть?

Возможно, просто потому, что вы изменили конфигурацию (по ошибке). Например, от Win32 до x64 и/или от Debug до Release (или любой их комбинации). В другой конфигурации не было ссылки на эту библиотеку.

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