【问题标题】:Native Windows API link problem on Qt + win32 + mingwQt + win32 + mingw 上的原生 Windows API 链接问题
【发布时间】:2008-11-06 04:48:55
【问题描述】:

我正在尝试使用 mingw 工具集将本机 Windows API 与 Qt 一起使用。某些功能存在链接问题。发生什么了?这是 mingw 名称修改的错误吗?

#ifdef Q_WS_WIN
    HWND hwnd = QWidget::winId();
    HDC hdcEMF  = CreateEnhMetaFile(NULL, NULL, NULL, NULL ) ;
    Rectangle(hdcEMF,100,100,200,200);
    HENHMETAFILE hemf = CloseEnhMetaFile(hdcEMF);
    OpenClipboard(hwnd);
    EmptyClipboard();
    SetClipboardData(CF_ENHMETAFILE,hemf);
    CloseClipboard();
#else   

错误:

对`CreateEnhMetaFileW@16'的未定义引用

对 `Rectangle@20' 的未定义引用

对 `CloseEnhMetaFile@4' 的未定义引用

【问题讨论】:

    标签: windows qt mingw


    【解决方案1】:

    函数CreateEnhMetaFileW()CloseEnhMetaFile() 定义在静态库Gdi32.lib 中,因此您必须确保链接到它。尝试将-lgdi32 添加到您用于编译的命令行的末尾。如果这不起作用,您可能必须通过添加 -L/path/to/folder/containing/the/library -lgdi32 来指定 Gdi32.lib 的完整路径。

    【讨论】:

      【解决方案2】:

      如果您想在 Qt 应用程序中使用 Windows API,则无需声明 WinAPI 函数 extern "C",只需包含:

      #include <qt_windows.h>
      

      在您的项目文件 (.pro) 中添加您使用的库:

      LIBS += -luser32 -lshell32 -lgdi32
      

      【讨论】:

        【解决方案3】:

        这些函数可能包含在内,但由于 C++ 假设而被破坏。

        查看 extern C { } 声明。它旨在声明不应因多态性/重载而名称混乱的函数。 (即两个同名函数)。

        【讨论】:

          【解决方案4】:

          @torn 你的解决方案对我有用。

          我想在我的 qt 应用程序中使用 win32 api 调用。

          #include #include your-win32-api-header

          最后是 LIBS += -llibrary 名称。

          请注意,您可能还必须为正确的路径提供 -L。

          【讨论】:

          • 这不应该是答案,只是对@torn 答案的评论。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-10
          • 1970-01-01
          • 2016-03-27
          • 1970-01-01
          相关资源
          最近更新 更多