2

mingw ツールセットを使用して Qt でネイティブ Windows API を使用しようとしています。一部の機能でリンクの問題があります。何が起こるのですか?これは 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' への未定義の参照

4

4 に答える 4

4

関数CreateEnhMetaFileW()CloseEnhMetaFile()は静的ライブラリ Gdi32.lib で定義されているため、それに対してリンクする必要があります。-lgdi32コンパイルに使用しているコマンド ラインの末尾に追加してみてください。それが機能しない場合は、-L/path/to/folder/containing/the/library -lgdi32代わりに追加して Gdi32.lib へのフル パスを指定する必要がある場合があります。

于 2008-11-06T04:55:52.560 に答える
3

Qt アプリで Windows API を使用する場合は、WinAPI 関数 extern "C" を宣言する必要はありません。以下を含めるだけです。

#include <qt_windows.h>

プロジェクト ファイル (.pro) に、使用するライブラリを追加します。

LIBS += -luser32 -lshell32 -lgdi32
于 2010-09-08T18:13:39.727 に答える
0

関数が含まれている可能性はありますが、C++ の前提により破損しています。

extern C { } 宣言を調べてください。これは、ポリモーフィズム/オーバーロードを考慮して名前をマングルしてはならない関数を宣言することを目的としています。(同じ名前の IE 2 つの関数)。

于 2008-11-06T04:59:29.477 に答える
0

@tornあなたのソリューションは私のために働いた。

qt アプリケーションで win32 API 呼び出しを使用したいと考えていました。

#include your-win32-api-header

そして最後に LIBS += -library 名。

正しいパスにも -L を指定する必要がある場合があることに注意してください。

于 2011-01-11T14:14:55.580 に答える