错误:LNK1120:5个未解析的外部

时间:2014-03-31 08:52:26

标签: c++

我正在尝试在我的帖子中获取有关已安装应用程序的详细信息。而且,我收到以下错误:

代码:

#include <iostream>
#include <string>
#include <windows.h>

using namespace std;

#ifdef _UNICODE
#define tcout       wcout
#define tstring     wstring
#else
#define tcout       cout
#define tstring     string
#endif

tstring RegistryQueryValue(HKEY hKey,
    LPCTSTR szName)
{
    tstring value;

    DWORD dwType;
    DWORD dwSize = 0;

    if (::RegQueryValueEx(
        hKey,                   // key handle
        szName,                 // item name
        NULL,                   // reserved
        &dwType,                // type of data stored
        NULL,                   // no data buffer
        &dwSize                 // required buffer size
        ) == ERROR_SUCCESS && dwSize > 0)
    {
        value.resize(dwSize);

        ::RegQueryValueEx(
            hKey,                   // key handle
            szName,                 // item name
            NULL,                   // reserved
            &dwType,                // type of data stored
            (LPBYTE)&value[0],      // data buffer
            &dwSize                 // available buffer size
            );
    }

    return value;
}

void RegistryEnum()
{
    HKEY hKey;
    LONG ret = ::RegOpenKeyEx(
        HKEY_LOCAL_MACHINE,     // local machine hive
        __TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"), // uninstall key
        0,                      // reserved
        KEY_READ,               // desired access
        &hKey                   // handle to the open key
        );

    if (ret != ERROR_SUCCESS)
        return;

    DWORD dwIndex = 0;
    DWORD cbName = 1024;
    TCHAR szSubKeyName[1024];

    while ((ret = ::RegEnumKeyEx(
        hKey,
        dwIndex,
        szSubKeyName,
        &cbName,
        NULL,
        NULL,
        NULL,
        NULL)) != ERROR_NO_MORE_ITEMS)
    {
        if (ret == ERROR_SUCCESS)
        {
            HKEY hItem;
            if (::RegOpenKeyEx(hKey, szSubKeyName, 0, KEY_READ, &hItem) != ERROR_SUCCESS)
                continue;

            tstring name = RegistryQueryValue(hItem, __TEXT("DisplayName"));
            tstring publisher = RegistryQueryValue(hItem, __TEXT("Publisher"));
            tstring version = RegistryQueryValue(hItem, __TEXT("DisplayVersion"));
            tstring location = RegistryQueryValue(hItem, __TEXT("InstallLocation"));

            if (!name.empty())
            {
                tcout << name << endl;
                tcout << "  - " << publisher << endl;
                tcout << "  - " << version << endl;
                tcout << "  - " << location << endl;
                tcout << endl;
            }

            ::RegCloseKey(hItem);
        }
        dwIndex++;
        cbName = 1024;
    }
    ::RegCloseKey(hKey);
}

void main(){
    RegistryEnum();
}

错误:

  

LNK1120:5个未解析的外部

     

LNK2019:未解析的外部符号_ imp _RegCloseKey @ 4引用于   function“void __cdecl RegistryEnum(void)”(?RegistryEnum @@ YAXXZ)

     

LNK2019:未解析的外部符号_ imp _RegEnumKeyExW @ 32引用   在函数“void __cdecl RegistryEnum(void)”(?RegistryEnum @@ YAXXZ)

     

LNK2019:未解析的外部符号_ imp _RegOpenKeyExW @ 20引用   在函数“void __cdecl RegistryEnum(void)”(?RegistryEnum @@ YAXXZ)

     

LNK2019:未解析的外部符号 imp__RegQueryValueExW @ 24   在函数“class std :: basic_string,class std :: allocator&gt; __cdecl中引用   RegistryQueryValue(struct HKEY *,wchar_t const *)“   (?RegistryQueryValue @@ YA?AV?$ basic_string的@ _WU?$ char_traits @ _W @ @@ STD V'$分配器@ 瓦@ @@ 2 STD @@ PAUHKEY _ @@ @ PB_W Z)

     

LNK2019:未解析的外部符号 wWinMain @ 16引用   function _ _tmainCRTStartup

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您必须与Advapi32.lib链接。