Qt + win32 + mingwでのネイティブWindows APIリンクの問題
質問
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」への未定義の参照
解決
関数 CreateEnhMetaFileW()
および CloseEnhMetaFile()
は静的ライブラリGdi32.libで定義されているため、必ずリンクする必要があります。コンパイルに使用しているコマンドラインの最後に -lgdi32
を追加してみてください。それでもうまくいかない場合は、代わりに -L / path / to / folder / taining / the / library -lgdi32
を追加してGdi32.libへのフルパスを指定する必要があります。
他のヒント
QtアプリでWindows APIを使用する場合は、WinAPI関数extern" C"を宣言する必要はありません。次を含めるだけです。
#include <qt_windows.h>
プロジェクトファイル(.pro)で、使用するライブラリを追加します。
LIBS += -luser32 -lshell32 -lgdi32
関数が含まれている可能性がありますが、C ++の仮定のために壊れています。
extern C {}宣言を調べます。ポリモーフィズム/オーバーロードを説明するために、マングルされてはならない関数を宣言することを目的としています。 (つまり、同じ名前の2つの関数)。
@tornあなたのソリューションは私のために働いた。
qtアプリケーションでwin32 api呼び出しを使用したかった
#include #include your-win32-api-header
、最後にLIBS + = -llibrary name。
正しいパスにも-Lを指定する必要があるかもしれないことに注意してください。