【问题标题】:Using Windows function SendMessage results in linking error with MSVC but not with MinGW使用 Windows 函数 SendMessage 会导致与 MSVC 的链接错误,但不会与 MinGW
【发布时间】:2015-03-04 12:35:06
【问题描述】:

我正在我的一个函数中使用 Windows 函数 SendMessage。

如果我用 MinGW 编译一切都很好。

如果我使用 MSVC2013 编译,我会收到此链接错误

myClass.obj:-1: error: LNK2019: unresolved external symbol __imp__SendMessageW@16 referenced in function "private: virtual void __thiscall ...

这是为什么呢?

【问题讨论】:

  • mingw 隐式链接了一些库,需要自己在msvc中进行lib
  • 嗯...好吧,那会是什么?
  • @avb 在 Visual Studio 的内置帮助中查找 SendMessage,您会发现。
  • 包括this页面上提到的库。

标签: c++ qt winapi visual-c++


【解决方案1】:

你可以这样做:

#ifdef _MSC_VER
 #pragma comment(lib, "user32.lib")
#endif

【讨论】:

  • "user32.dll" 是一个 DLL,而不是导入库。导入库是"user32.lib"。或者,您可以完全省略文件扩展名,只需使用 #pragma comment(lib, "user32")
  • 哦,抱歉,为 .dll 输入了错误的 .lib。当然,链接器指令应该接受 .lib 文件,感谢 Alf 的编辑。
【解决方案2】:

Visual C++ 默认只链接kernel32.dll

g++ 还链接了许多其他 DLL(Windows API 子库)。具体取决于选项。

specs 文件中的相关行与 MinGW g++ 4.9.1 的 Nuwen 发行版:

%{pg:-lgmon} %{pthread:-lpthread} %{!no-pthread: } %{mwindows:-lgdi32 -lcomdlg32} -ladvapi32 -lshell32 -luser32 -lkernel32

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2013-11-30
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    相关资源
    最近更新 更多