同步操作将从 精易科技/eapi 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "..\include_eapi_header.h"using namespace std;#pragma warning (disable:4996)// 调用格式: _SDT_ALL 格式化字符串, 命令说明: "将一个格式化的字符串输出到一个目的字符串中。给定unicode会返回unicode,此命令与c中sprintf相同,请遵守格式化规则,不把ansi和unicode混用"// 参数<1>: 格式化字符串 _SDT_ALL, 参数说明: "设置自动运行时的程序名称。"// 参数<2>: 格式化字符串 _SDT_ALL, 参数说明: "设置自动运行时的程序名称。"// 变长参数, 命令参数表中最后一个参数可以被重复添加inline std::vector<unsigned char>& operator+=(std::vector<unsigned char>& var1, const std::vector<unsigned char>& var2) {var1.reserve(var1.size() + var2.size());var1.insert(var1.end(), var2.begin(), var2.end());return var1;}template<typename Type>std::vector<unsigned char> to_arg(const Type& data) {//大型结构体防止拷贝,保证数据结构的执行效率return std::vector<unsigned char>((unsigned char*)&data, ((unsigned char*)&data + sizeof(Type)));};inline size_t get_Occurrence_Count(const std::string& str, const std::string& text) {size_t count = 0;size_t pos = str.find(text, 0);while (pos != std::string::npos) {count++;pos = str.find(text, pos + text.length());}return count;}EAPI_EXTERN_C void eapi_sprintf_84_eapi(PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf){std::string reuslt(pArgInf->m_pText);//先获取出现百分比符号的数量,提前申请文本数值格式化为二进制时对应数量的最大长度,防止溢出,本来是想要捕获异常重新申请,空间换时间吧size_t count = get_Occurrence_Count(reuslt, "%");//总长度size_t lenth = reuslt.size();if (pArgInf->m_dtDataType == SDT_TEXT && strlen(pArgInf->m_pText) > 0) {if (nArgCount > 1) {std::vector<unsigned char> valist;for (int i = 1; i < nArgCount; i++) {if (pArgInf[i].m_dtDataType == SDT_FLOAT || pArgInf[i].m_dtDataType == SDT_INT || pArgInf[i].m_dtDataType == SDT_DOUBLE || pArgInf[i].m_dtDataType == SDT_INT64) {lenth += 200;switch (pArgInf[i].m_dtDataType) {case SDT_INT:valist += to_arg(pArgInf[i].m_int);break;case SDT_FLOAT:valist += to_arg(pArgInf[i].m_float);break;case SDT_DOUBLE:valist += to_arg(pArgInf[i].m_double);break;case SDT_INT64:valist += to_arg(pArgInf[i].m_int64);break;default:break;}}else if (pArgInf[i].m_dtDataType == SDT_BYTE) {lenth += 2;valist += to_arg(pArgInf[i].m_byte);}else if (pArgInf[i].m_dtDataType == SDT_TEXT) {if (pArgInf[i].m_pText && strlen(pArgInf[i].m_pText) > 0){//如果字符串内容为大数,格式化的类型为数值,此时取最大格式化为二进制lenth += 10 * count * strlen(pArgInf[i].m_pText) + 1;valist += to_arg(pArgInf[i].m_pText);}}}std::string temp(lenth, '0円');vsprintf_s(&temp[0], lenth, reuslt.c_str(), reinterpret_cast<va_list>(valist.data()));reuslt = temp;}}pRetData->m_pText = CloneTextData(reuslt.c_str());debug_put(reuslt);}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。