错误LNK2019:未解析的外部符号:: FindWindow()函数

时间:2014-10-22 08:11:58

标签: c++ windows lnk2019 visual-c++-2012

我有函数findId(const QString& name),它在共编译时会抛出一个错误:

  

错误LNK2019:未解析的外部符号__imp__FindWindowW @ 8在函数&#34中引用; private:unsigned int__thiscall MainClass :: findId(class QString const&)"(findId @ MainClass @@ AAEIABVQString @@@ Z)

mainclass.cpp:

WId MainClass::findId(const QString& name)
{
  return (WId) ::FindWindow(NULL, (TCHAR*)name.utf16());
}

我不知道问题出在哪里,因为我之前在我的其他项目中使用过这段代码并且工作正常。也许我错过了什么。

2 个答案:

答案 0 :(得分:3)

解决方案资源管理器中,您有几个标签。其中一个标签名为“Property Manager”,请打开此标签。在此选项卡中,您将找到项目及其配置。它实际包含的是 Property Sheets ,其中一个是“核心Windows库”。如果右键单击此项,然后转到Linker-> Input,您将找到Windows库user32.lib等。这些属性由项目通过%(AdditionalDependencies)继承。

在您当前的项目中没有正确设置其中一项。

答案 1 :(得分:3)

链接器正在尝试编译您的应用程序,但不能,因为它不知道FindWindow指的是什么,因为您还没有使用user32库,这是必需的对于FindWindow函数。 以下代码将修复它。

        #prama comment(lib, "user32.lib")    
        WId MainClass::findId(const QString& name)
        {
          return (WId) ::FindWindow(NULL, (TCHAR*)name.utf16());
        }

这是根据您提供的代码进行的,可能还有更多代码。 如果是这样,只需在#pragma comment(lib, "user32.lib")阻止后#include,但在您的任何功能或namespace之前。{/ p>

MSDN KB article on this issue中的以下示例将保证LNK2019错误:

// LNK2019.cpp
// LNK2019 expected
extern char B[100];   // B is not available to the linker
int main() {
   B[0] = ' ';
}