user3296338
user3296338

Reputation: 87

error: LNK1120: 5 unresolved externals

I'm trying to get details about installed applications in my post. And, I'm getting the below errors:

Code:

#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();
}

Errors:

LNK1120: 5 unresolved externals

LNK2019: unresolved external symbol _imp_RegCloseKey@4 referenced in function "void __cdecl RegistryEnum(void)" (?RegistryEnum@@YAXXZ)

LNK2019: unresolved external symbol _imp_RegEnumKeyExW@32 referenced in function "void __cdecl RegistryEnum(void)" (?RegistryEnum@@YAXXZ)

LNK2019: unresolved external symbol _imp_RegOpenKeyExW@20 referenced in function "void __cdecl RegistryEnum(void)" (?RegistryEnum@@YAXXZ)

LNK2019: unresolved external symbol imp__RegQueryValueExW@24 referenced in function "class std::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: unresolved external symbol wWinMain@16 referenced in function __tmainCRTStartup

How may I fix this please?

Upvotes: 2

Views: 5268

Answers (1)

Jabberwocky
Jabberwocky

Reputation: 50778

You must link with the Advapi32.lib.

Upvotes: 6

Related Questions