首页 文章

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

提问于
浏览
1

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

码:

#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在函数“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:函数”class std ::“中引用的未解析的外部符号imp__RegQueryValueExW @ 24 basic_string,class std :: allocator> __cdecl RegistryQueryValue(struct HKEY *,wchar_t const *)“(?RegistryQueryValue @@ YA?AV?$ basic_string @ _WU?$ char_traits @ _W @ std @@ V?$ allocator @ W @ 2 @@ std @@ PAUHKEY _ @@ PB_W @ Z)LNK2019:未解析的外部符号wWinMain @ 16在函数__tmainCRTStartup中引用

我该如何解决这个问题?

1 回答

  • 3

    您必须与 Advapi32.lib 链接 .

相关问题