未定义的引用`PageSetupDlgW@4';在Qt中链接时

未定义的引用`PageSetupDlgW@4';在Qt中链接时,qt,winapi,Qt,Winapi,我试图在Qt中使用windowsapi页面设置dlg来节省一些时间。但是,我在标题的编译过程中遇到了错误。这是我的密码: #include <QtCore/QCoreApplication> #include <windows.h> #include <QDebug> int main(int argc, char *argv[]) { PAGESETUPDLG lppsd; QCoreApplication a(argc, argv); /

我试图在Qt中使用windowsapi页面设置dlg来节省一些时间。但是,我在标题的编译过程中遇到了错误。这是我的密码:

#include <QtCore/QCoreApplication>
#include <windows.h>
#include <QDebug>

int main(int argc, char *argv[])
{
    PAGESETUPDLG lppsd;
    QCoreApplication a(argc, argv);
//#ifdef Q_WS_WIN
//    MessageBox(NULL,TEXT("This is windows window"),
//               TEXT("HAHAYOYO"),MB_OK);
    PageSetupDlg(&lppsd);
//#endif
    return a.exec();
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
页面设置DLG lppsd;
qcorea应用程序(argc、argv);
//#如果你赢了
//MessageBox(空,文本(“这是windows窗口”),
//文本(“HAHAYOYO”),MB_OK);
页面设置DLG(&lppsd);
//#恩迪夫
返回a.exec();
}
我已经在.pro文件中添加了
LIBS+=-LC:\Windows\System32\ComDlg32.dll
,但是它不起作用。我不确定这样写是否正确


我的第二个问题是,当我尝试调用Windows API函数时,是否需要添加
#ifdef
#endif
语句?因为没有它们,
MessageBox
函数可以正常运行。

您需要添加
Comdlg32.lib
,而不是
Comdlg32.dll
,它是一个dll,不是一个包含库。 但是为什么不直接使用呢?此外,如果计划使用
PAGESETUPDLG
变量,则需要初始化该变量,请参阅

我的第二个问题是,当我尝试调用Windows API函数时,是否需要添加#ifdef&#endif语句


您应该添加它们,如果您打算在非Windows系统上运行,WinAPI肯定不可用(这是您应该使用的原因),但是,如果您的系统依赖于WinAPI函数,则没有意义,因为您将绑定到Windows。

我已将lib更改为LIBS+=-L“C:\Program Files\Microsoft SDK\Windows\v7.0A\Lib\ComDlg32.Lib但gcc仍然抱怨同样的错误。尽管有控制台或gui应用程序,我还是加入了它。Ooops~我已经放弃使用这种方法。可能包含dll文件的路径应该没有空格。我希望您在本项目的文档中充分说明,尽管您使用的是Qt,但您也使用了平台限制库,因此否定了使用Qt可以获得的任何好处。如果你在字里行间读到,我认为这是个坏主意。@Styne666好的,我知道这样做不好。我写这篇文章是为了熟悉winapi。Qt是否提供了涵盖整个winapi的所有函数?我不知道。如果是,那么我们应该让应用程序独立于平台。