Qt Windows下的exe执行文件中获取exe的版本号遇到的error

最近在Qt中写一个获取exe版本号的小程序中遇到了一个疑问,纠结了很久。

一开始,从错误信息中,以为是QString和string类型的转换出了什么问题,后才查阅了很多资料才知道找到了解决办法

error如下代码

原因:Qt默认Built没有把wchar_t作为内建类型,才导致的这个link error


环境:

Qt5.2.0+VS2012



error:

1>getversion.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > __thiscall QString::toStdWString(void)const " (__imp_?toStdWString@QString@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@XZ),该符号在函数 "public: class QString __thiscall GetVersion::GetFileVertion(class QString)" (?GetFileVertion@GetVersion@@QAE?AVQString@@V2@@Z) 中被引用
1>C:\Users\Administrator\Desktop\GetVersion001\GetVersion\Win32\Debug\\GetVersion.exe : fatal error LNK1120: 1 个无法解析的外部命令


解决:

在项目属性/配置属性/C/C++/语言 中,将WChar_t视为内置类型改成“”是“”



发布了14 篇原创文章 · 获赞 8 · 访问量 3万+
展开阅读全文

QT调试代码出现提示信息错误

07-18

QT调试代码中出现 Internal error: pc 0xa0520000 in read in psymtab, but not in symtab. 请问下这是问题,怎么解决?对程序有影响吗? 下面是我的代码 #include "socketwidget.h" #include <QPushButton> #include <QTextEdit> #include <QLineEdit> #include <QLabel> #include <QDebug> #include <QHostAddress> #include <QByteArray> SocketWidget::SocketWidget(QWidget *parent) : QWidget(parent) { send_btn = new QPushButton(this); send_btn->setText("send"); send_btn->setGeometry(9,268,78,23); close_btn = new QPushButton(this); close_btn->setText("close"); close_btn->setGeometry(316,268,75,23); connect_btn = new QPushButton(this); connect_btn->setText("connect"); connect_btn->setGeometry(316,20,75,23); connect(send_btn,&QPushButton::clicked,this,&SocketWidget::on_buttonSend_clicked); connect(close_btn,&QPushButton::clicked,this,&SocketWidget::on_buttonClose_clicked); connect(connect_btn,&QPushButton::clicked,this,&SocketWidget::on_buttonConnect_clicked); send_btn->setEnabled(false); close_btn->setEnabled(false); label1 = new QLabel(this); label1->setText("服务器IP:"); label1->setGeometry(9,9,72,20); label2 = new QLabel(this); label2->setText("服务器端口:"); label2->setGeometry(9,35,72,20); lineEditIP = new QLineEdit(this); lineEditIP->setText("127.0.0.1"); lineEditIP->setGeometry(87,9,223,20); lineEditPort = new QLineEdit(this); lineEditPort->setText("8888"); lineEditPort->setGeometry(87,35,223,20); textEditRead = new QTextEdit(this); textEditRead->setReadOnly(true); textEditRead->setGeometry(9,61,382,97); textEditWrite = new QTextEdit(this); textEditWrite->setGeometry(9,164,382,98); tcpSocket =NULL; //分配空间制定父对象 tcpSocket = new QTcpSocket(this); setWindowTitle("客户端"); connect(tcpSocket,&QTcpSocket::connected, [=]() { textEditRead->setText("成功和服务器连接"); send_btn->setEnabled(true); close_btn->setEnabled(true); connect_btn->setEnabled(false); } ); connect(tcpSocket,&QTcpSocket::readyRead,this,&SocketWidget::onSocketReadyRead); connect(tcpSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error), this, &SocketWidget::displayError); } SocketWidget::~SocketWidget() { } void SocketWidget::onSocketReadyRead() { if(tcpSocket->bytesAvailable() <= 0) { return; } qint64 totalBytes = 0; m_buffer = NULL; //从缓存区去除数据,但是不确定取出来的字节数; QByteArray buffer= tcpSocket->readAll(); m_buffer.append(buffer); unsigned int totalLen = m_buffer.size(); textEditRead->append(buffer); //这边确实需要利用长度做while循环,因为有可能一下子读取到两条以上的完整记录,就需要进行循环处理了; //超过一条完整小于第二条完整记录时,如果已经达到包头长度就先把包头保存下来,整个过程循环往复 while (totalLen) { //与QDataStream绑定,方便操作 QDataStream packet(m_buffer); packet.setVersion(QDataStream::Qt_5_10); //不够包头长度的不处理,结束while循环 unsigned int MINSIZE = sizeof(qint64)*2; if(totalLen < MINSIZE) { //textEditRead->append(buffer); break; } //将包头读入了进来按照定义的协议,先读命令长度,再读命令的类型; packet >> totalBytes >>serverCmd; //缓存中的内容长度没有达到命令的长度,那就先结束,等足够了再来解析 if(totalLen<totalBytes) break; //足够长了就开始解析 // QDir dir(sysFilePath); //系统文件目录 // if(!dir.exists()) // dir.mkdir(sysFilePath); switch (serverCmd) { case QString_recv: { qDebug()<<"开始接收字符串..."; QByteArray datas = m_buffer.mid(MINSIZE,totalBytes-MINSIZE); QString strInfo;//数据包中的message strInfo.prepend(datas); qDebug() <<strInfo;//输出接收到的QString } break; default: //qint64 nbytes = tcpSocket->bytesAvailable(); //textEditRead->append(buffer); break; } //缓存多余的数据 buffer = m_buffer.right(totalLen - totalBytes); //截取下一个数据包的数据,留作下次读取 totalLen = buffer.size(); //更新多余的数据 m_buffer = buffer; } /* while (tcpSocket->bytesAvailable() > 0) { qint64 nbytes = tcpSocket->bytesAvailable(); QByteArray array = tcpSocket->read(nbytes); textEditRead->append(array); }*/ } void SocketWidget::on_buttonConnect_clicked() { QHostAddress localIP = QHostAddress("127.0.0.1"); //获取服务器ip和端口 QString ip = lineEditIP->text(); qint16 port = lineEditPort->text().toInt(); //tcpSocket->abort(); if(tcpSocket->bind(localIP,42055) ) { qDebug() << "1 localHost:" << localIP.toString(); qDebug() << "2 localPort:" << tcpSocket->localPort(); } tcpSocket->abort(); //主动和服务器建立连接 tcpSocket->connectToHost(ip, port); if(tcpSocket->waitForConnected(1000) ) { send_btn->setEnabled(true); close_btn->setEnabled(true); connect_btn->setEnabled(false); } else { QMessageBox::information(this, tr(" Client"), tr("连接失败,请检查后重试")); } } void SocketWidget::on_buttonSend_clicked() { //获取编辑框内容 QString str = textEditWrite->toPlainText(); //发送数据 tcpSocket->write(str.toUtf8().data() ); if(tcpSocket->waitForBytesWritten(1000) ) { textEditWrite->clear(); } else { QMessageBox::information(this, tr(" Client"), tr("内容为空,输入后从新发送")); } } void SocketWidget::displayError(QAbstractSocket::SocketError socketError) { switch (socketError) { case QAbstractSocket::RemoteHostClosedError: connect_btn->setEnabled(true); send_btn->setEnabled(false); close_btn->setEnabled(false); QMessageBox::information(this, tr(" Client"), tr("The host was disconnect. Please check and " "request again.")); textEditRead->append("服务器已断开连接"); break; case QAbstractSocket::HostNotFoundError: QMessageBox::information(this, tr(" Client"), tr("The host was not found. Please check the " "host name and port settings.")); break; case QAbstractSocket::ConnectionRefusedError: QMessageBox::information(this, tr(" Client"), tr("The connection was refused by the peer. " "Make sure the server is running, " "and check that the host name and port " "settings are correct.")); break; default: QMessageBox::information(this, tr(" Client"), tr("The following error occurred: %1.") .arg(tcpSocket->errorString())); } } void SocketWidget::on_buttonClose_clicked() { //主动和对方断开连接 tcpSocket->disconnectFromHost(); if(tcpSocket->state() == QAbstractSocket::UnconnectedState || tcpSocket->waitForDisconnected(1000) ) { tcpSocket->close(); connect_btn->setEnabled(true); send_btn->setEnabled(false); close_btn->setEnabled(false); textEditRead->append("已断开连接"); } else { QMessageBox::information(this, tr(" Client"), tr("断开连接失败,请检查后重试")); } } 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览