#include <afxinet.h> fatal error C1903无法从以前的错误中恢复;正在停止编译

本文详细介绍了在C++项目中遇到头文件引入导致编译错误的问题,并提供了有效的解决方案。通过分析错误信息,发现问题是由于在`std::afxinet.h`头文件中引用了`winhttp.h`文件导致的。文章进一步解释了如何通过注释掉不必要的头文件来解决这一问题,旨在帮助开发者避免类似错误,提高编程效率。

#include <afxinet.h>

添加该头文件出现以下错误:

fatal error C1903无法从以前的错误中恢复;正在停止编译

 

发现在stdafx.h文件中出现:

#include <winhttp.h>

将改文件注解掉,就没那个错误,

#pragma once #include <afxinet.h> #include <nlohmann/json.hpp> // 需要引入 nlohmann/json.hpp #include <mutex> #include <QStringList> #include <QQueue> #include <QJsonObject> #include <QJsonDocument> #include <QTextCodec> #include <QJsonArray> #include <deque> #include <QDateTime> #include "FileIO.h" #include "MTFDataDefine.h" using std::wstring; //using json = nlohmann::json; using json = nlohmann::ordered_json; struct Response { int Code; std::string Result; std::string Msg; // 从 JSON 解析的方法 static Response from_json(const json& j) { return { j.at("Code").get<int>(), j.at("Result").get<std::string>(), j.at("Msg").get<std::string>() }; } }; struct Check_MesInfo { QString EquipmentEncode; QString UserName; QString SpecificationName; QString SN; QVariantMap toVariantMap() const { QVariantMap map; map["EquipmentEncode"] = QVariant::fromValue(EquipmentEncode); map["UserName"] = QVariant::fromValue(UserName); map["SpecificationName"] = QVariant::fromValue(SpecificationName); map["SN"] = QVariant::fromValue(SN); return map; } }; struct Device_MesInfo { QString EquipmentEncode; QString type; QString SpecificationName; QString eventName; QString deviceStatus; QString UserName; QString DocumentMD5; QString deviceParams; QVariantMap toVariantMap() const { QVariantMap map; map["EquipmentEncode"] = QVariant::fromValue(EquipmentEncode); map["type"] = QVariant::fromValue(type); map["SpecificationName"] = QVariant::fromValue(SpecificationName); map["eventName"] = QVariant::fromValue(eventName); map["deviceStatus"] = QVariant::fromValue(deviceStatus); map["deviceStatus"] = QVariant::fromValue(deviceStatus); map["UserName"] = QVariant::fromValue(UserName); map["DocumentMD5"] = QVariant::fromValue(DocumentMD5); QVariantMap param; param["时间戳"] = QDateTime::currentDateTime().toString();; map["deviceParams"] = QVariant::fromValue(param); return map; } }; enum DeviceState { Waiting, // 待机(开启软件) Wroking, // 作业(开启自动流程) Faulted, // 故障停止报警 Stopped // 停机(关闭软件) }; namespace ProductPosition { const string In = "进料完成"; const string Out = "出料完成"; }; class LCMESClass { public: LCMESClass(); ~LCMESClass(); public: string m_logInfo; CInternetSession m_Session{ _T("MyPostAgent") }; CHttpConnection* m_pConnection = nullptr; std::mutex m_mutex; // 多线程安全 std::string m_cachedHost; int m_cachedPort = 0; public: void ThradStart(); void Connect(); // Save void PullMes(); // check int Check(string sn); // 状态改变事件 int DeviceStateChanged(DeviceState state); // 设备状态解除事件 int DeviceAlarmCleared(); // 产品移动事件 int ProductMoved(string ProductPosition); // 测试完成发送完工报告事件 int TestEnd(); // private: // 产品check Response EquipmentTextData_Check(string info); // 产品过站 Response EquipmentTextData_Save(string info); // 产品生产过程事件、配方比对 Response deviceInfoCollerct(string info); int getDeviceInfoCollerctResult(string eventName, string deviceStatus); Response Send(const string & info, const string & hostname, const int & port, const string & apiPath); Response ParseRcv(string& msg); private: QStringList m_bufferFileNames; FileIO m_File; QStringList m_currentFileNames; //剪切文件的路径 QString m_destinationFolder; int m_iItemIndex; TestData m_MesInfo; QQueue<TestData> m_qqmesInfos; QStringList m_AllRemoveFileNames; QString m_qstrRemoveFile; int iCount; // 计数器 private: StepCtrl sSC_PullMes; int FL_PullMes(); int checkFolder(); int addInfo(string& info); template<typename T> inline bool deserializeFromJsonFile(const QString & filePath, T & object); // 序列化函数 template <typename T> inline bool serializeToJsonFile(const T& object, QJsonObject& jsonObj); int updataMes(TestData testData, MesInfo mesInfo); int updataMes(QQueue<TestData> testData, MesInfo mesInfo); QString ShortLCMesInfo(TestData testData); // 拼接基本信息,EFL,FFL,MTF,FocalShift,Peak,Result QString SplicingEFL(TestData testData, QString& tempString); QString SplicingFFL(TestData testData, QString& tempString); QString SplicingMTF(TestData testData, QString& tempString); QString SplicingFocalShfit(TestData testData, QString& tempString); QString SplicingPeak(TestData testData, QString& tempString); QString SplicingFOV(TestData testData, QString& tempString); QString SplicingDOF(TestData testData, QString& tempString); QString SplicingMultiFrqMTF(TestData testData, QString& tempString); // QJsonArray 到 QVariantList 的转换 QVariantList jsonArrayToVariantList(const QJsonArray& array); // QVariantList 到 QJsonArray 的转换 QJsonArray variantListToJsonArray(const QVariantList& list); int addInfo(StepCtrl& crtl, int next, string info, bool blag = true); int addInfo(StepCtrl& crtl, int next, string info, int delay); int addErrInfo(string info); }; template<typename T> inline bool LCMESClass::deserializeFromJsonFile(const QString & filePath, T & object) { T tempObj; QFile file(filePath); if (!file.open(QIODevice::ReadOnly)) { m_Loger.RecordLogError("Failed to open file for reading:" + (string)file.errorString().toLocal8Bit()); return false; } QTextStream stream(&file); QString readAll = stream.readAll(); QTextCodec *utf8 = QTextCodec::codecForName("UTF-8"); QString str = utf8->toUnicode(readAll.toUtf8()); QByteArray ar = str.toUtf8(); QJsonParseError parseError; QJsonDocument jsonDoc = QJsonDocument::fromJson(ar, &parseError); if (parseError.error != QJsonParseError::NoError) { m_Loger.RecordLogError("Failed to parse JSON data:" + (string)parseError.errorString().toLocal8Bit()); return false; } QJsonObject jsonObj = jsonDoc.object(); if (jsonObj.isEmpty()) { m_Loger.RecordLogError("JSON data does not contain a valid object"); return false; } // 特殊处理容器类型和嵌套对象 QVariantMap variantMap; for (const QString& key : jsonObj.keys()) { QJsonValue value = jsonObj[key]; if (value.isArray()) { variantMap[key] = QVariant::fromValue(jsonArrayToVariantList(value.toArray())); } else if (value.isObject()) { variantMap[key] = value.toObject().toVariantMap(); } else { variantMap[key] = value.toVariant(); } } QVariant v = QVariant::fromValue(variantMap); object = tempObj.fromVariant(v); return true; } template<typename T> inline bool LCMESClass::serializeToJsonFile(const T & object, QJsonObject & jsonObject) { QJsonObject jsonObj; QVariantMap variantMap = object.toVariantMap(); for (const QString& key : variantMap.keys()) { QVariant variant = variantMap[key]; if (variant.type() == QMetaType::QVariantList) { QVariantList list = variant.toList(); jsonObj[key] = QJsonValue::fromVariant(variantListToJsonArray(list)); } else if (variant.canConvert<QVariantMap>()) { QVariantMap nestedMap = variant.toMap(); jsonObj[key] = QJsonObject::fromVariantMap(nestedMap); } else { jsonObj[key] = QJsonValue::fromVariant(variant); } } jsonObject = jsonObj; QJsonDocument jsonDoc(jsonObj); QString jsonString = jsonDoc.toJson(QJsonDocument::Compact); return true; }按照单例改造这个,我需要再一个线程中嗲用pullMES,再另一个线程中调用各种事件函数,还需要开一个定时器调用定时上传数量统计函数
最新发布
09-13
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值