commit 889333277a4028c9adf217bfe5ffff357aefab31 Author: lijh Date: Fri Dec 22 17:37:53 2023 +0800 20231222 commit diff --git a/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj b/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj new file mode 100644 index 0000000..fbcd31b --- /dev/null +++ b/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj @@ -0,0 +1,174 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {80658E28-1D8D-406B-B96C-6F8B3009168B} + Win32Proj + DFLWLBOMTOERP + 10.0.19041.0 + DFL_WL_BOM_TOSRM + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + + + Level3 + Disabled + true + NDEBUG;_CONSOLE;IPLIB=none;%(PreprocessorDefinitions) + true + C:\Users\Administrator\Desktop\dfl\oracle\include;C:\Users\Administrator\Desktop\dfl\include;C:\Users\Administrator\Desktop\dfl\include_cpp;%(AdditionalIncludeDirectories) + + + Console + true + + + + + + + Level3 + MaxSpeed + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + Level3 + MaxSpeed + true + true + true + NDEBUG;_CONSOLE;IPLIB=none;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions) + false + D:\Clibs\12\include;D:\Clibs\12\include_cpp;D:\Clibs\12\OCI\include;%(AdditionalIncludeDirectories) + /D _CRT_SECURE_NO_WARNINGS %(AdditionalOptions) + + + Console + true + true + true + D:\项目\东富龙\东富龙\lib\*.lib;D:\Clibs\12\lib\*.lib;D:\Clibs\12\lib\itk_main.obj;%(AdditionalDependencies) + libuser_exits.ar.lib;%(IgnoreSpecificDefaultLibraries) + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj.filters b/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj.filters new file mode 100644 index 0000000..ecb8b02 --- /dev/null +++ b/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj.filters @@ -0,0 +1,45 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + 源文件 + + + 头文件 + + + 头文件 + + + + + 头文件 + + + 头文件 + + + 头文件 + + + 头文件 + + + \ No newline at end of file diff --git a/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj.user b/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj.user new file mode 100644 index 0000000..be25078 --- /dev/null +++ b/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOERP.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOSRM.cpp b/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOSRM.cpp new file mode 100644 index 0000000..4e5e512 --- /dev/null +++ b/DFL_WL_BOM_TOERP/DFL_WL_BOM_TOSRM.cpp @@ -0,0 +1,571 @@ +#include +#include +#include "dfl_custom.h" +#include "ocilib.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "corecrt_io.h" +#include "direct.h" +#include +#include +#pragma comment(lib, "Wininet") +#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING +#include +#pragma comment(lib, "ws2_32.lib") +#include +using namespace std; +#include +#include +#include "cJSON.h" +#include +#include +#include +#include "common_itk_util.h" +//#include "dfl_custom.h" +//#include "util.h" +//#include +//#include "ocilib.h" +//using namespace std; + +extern "C" int POM_AM__set_application_bypass(logical bypass); + +size_t write_data(void* ptr, size_t size, size_t nmemb, void* stream) { + string data((const char*)ptr, (size_t)size * nmemb); + *((stringstream*)stream) << data << endl; + return size * nmemb; +} +string GbkToUtf8(const std::string& strGbk)//传入的strGbk是GBK编码 +{ + //gbk转unicode + int len = MultiByteToWideChar(CP_ACP, 0, strGbk.c_str(), -1, NULL, 0); + wchar_t* strUnicode = new wchar_t[len]; + wmemset(strUnicode, 0, len); + MultiByteToWideChar(CP_ACP, 0, strGbk.c_str(), -1, strUnicode, len); + + //unicode转UTF-8 + len = WideCharToMultiByte(CP_UTF8, 0, strUnicode, -1, NULL, 0, NULL, NULL); + char* strUtf8 = new char[len]; + WideCharToMultiByte(CP_UTF8, 0, strUnicode, -1, strUtf8, len, NULL, NULL); + + std::string strTemp(strUtf8);//此时的strTemp是UTF-8编码 + delete[]strUnicode; + delete[]strUtf8; + strUnicode = NULL; + strUtf8 = NULL; + return strTemp; +} + +char* U2G(const char* utf8) +{ + int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0); + wchar_t* wstr = new wchar_t[len + 1]; + memset(wstr, 0, len + 1); + MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len); + len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL); + char* str = new char[len + 1]; + memset(str, 0, len + 1); + WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL); + if (wstr) delete[] wstr; + return str; +} + +void createDir(string dPath,string mdCommand) { + if (_access(dPath.c_str(), 0) != 0) {//判断文件夹是否存在 + system(mdCommand.append(dPath).c_str()); + } +} + +void Split(string strArg, string spliter, vector& ans) +{ + + ans.clear(); + + size_t index0; + string one_arg; + + if (strArg.find_first_not_of(" ") == string::npos) + strArg = ""; + + + while (strArg.size() > 0) + { + + index0 = strArg.find(spliter); + + if (index0 != string::npos) + { + + one_arg = strArg.substr(0, index0); + strArg = strArg.substr(index0 + spliter.size()); + + ans.push_back(one_arg); + } + else + { + + ans.push_back(strArg); + break; + } + } +} + + +//物料传递erp +int DFL_WL_TO_SRM(char** c_sql_values, const char* flow_uid) { + WriteLog("===================================\n"); + WriteLog("WL to SRM begin\n"); + WriteLog("===================================\n"); + + int ifail = ITK_ok; + WriteLog("Open super privilege\n"); + POM_AM__set_application_bypass(true); + //流程的状态 + int status1 = 2; + int att_cnt = 0; + tag_t root_task_tag = NULLTAG, + *attachments; + tag_t executor; + tag_t query_tag1 = NULLTAG; + char* user_uid; + char dwg[] = ".dwg"; + char DWG[] = ".DWG"; + const char query_name_product[1][QRY_name_size_c + 1] = { "零组件版本" }; + //uid转tag对象 + ITK__convert_uid_to_tag(flow_uid, &root_task_tag); + tag_t root = NULLTAG; + EPM_ask_root_task(root_task_tag,&root); + + if (root_task_tag == NULLTAG || root == NULLTAG) { + + if (ConnServer(c_sql_values[1], c_sql_values[2], c_sql_values[0]))//"tc11","infodba","//172.16.50.40/tc11" "TC12","infodba","172.16.68.13/tc1" + { + WriteLog("提示:中间数据表访问失败\n"); + return ifail; + } + else { + char sql8[1024] = "\0"; + sprintf(sql8, "update DFL_DRAWING_TO_SRM_TASK set status = '%s' where flowid = '%s'", "已处理", flow_uid); + WriteLog("提示:sql8==%s\n", sql8); + if (ExecuteSQLNoInputParam(sql8) == -1) + { + WriteLog("提示:数据插入 失败, %s \n", sql8); + return 1; + } + else { + ExecuteSQLNoInputParam("commit"); + } + } + return ifail; + } + + if (ifail != ITK_ok) { + WriteLog("this workflow is not exist!\n"); + return ifail; + } + ITKCALL(EPM_ask_attachments(root, EPM_target_attachment, &att_cnt, &attachments)); + vector items; + WriteLog("att_cnt=%d\n", att_cnt); + //便利流程下的对象,获取满足条件的item,并将item添加进items + int index = 0; + //获取ip和文件夹路径 + char* tomcatIp = NULL; + char* position = NULL; + char* url = NULL; + PREF_ask_char_value("DFL_FTP_IP", 0, &tomcatIp); + PREF_ask_char_value("DFL_FTP_IP", 1, &position); + PREF_ask_char_value("DFL_SRM_URL", 0, &url); + char* group_name1; + date_t creDate; + for (int i = 0; i < att_cnt; i++) + { + tag_t tagt1 = NULLTAG; + tagt1 = attachments[i];// + char* type1; + int juede = 0;//判断数据库是否连接 + //获取版本下的数据集 + int dataset_num = 0; + tag_t* dataset_tags = NULL; + ITKCALL(AOM_ask_value_string(tagt1, "object_type", &type1)); + if (strcmp("T2_outsourceRevision", type1) == 0) { + //判断是否存在dwg文件 + //获取版本下的数据集 + char* file_name; + char* origin_file_name; + tag_t* ref_object = NULL; + int n_found = 0; + + //数据 + char* itemId; + char* objectname; + char* datesetname; + char* fileurl; + char* revision; + int released = 0; + date_t createtime; + char* createtime_str; + date_t updatetime; + char* updatetime_str; + char* urlcreatetime; + string finishtime; + string exportName = ""; + string urlName = ""; + ITKCALL(AOM_ask_value_tags(tagt1, "IMAN_specification", &dataset_num, &dataset_tags)); + for (int k = 0; k < dataset_num; k++) + { + + ITKCALL(AOM_ask_value_string(dataset_tags[k], "object_name", &file_name)); + + if (strstr(file_name, dwg) || strstr(file_name, DWG)) { + //获取数据集文件名称 + ITKCALL(AOM_ask_value_string(dataset_tags[k], "current_name", &origin_file_name)); + //ftp上传数据集 + ITKCALL(AE_ask_dataset_named_refs(dataset_tags[k], &n_found, &ref_object)); + + WriteLog("n_found=%d\n", n_found); + if (n_found > 0) { + //存在.dwg数据集 + //设置处理开始时间 + if (ConnServer(c_sql_values[1], c_sql_values[2], c_sql_values[0]))//"tc11","infodba","//172.16.50.40/tc11" "TC12","infodba","172.16.68.13/tc1" + { + WriteLog("提示:中间数据表访问失败\n"); + return ifail; + } + else { + juede = 1; + time_t curtime1; + time(&curtime1); + tm* nowtime1 = localtime(&curtime1); + string dealBeginTime; + dealBeginTime.append(std::to_string(1900 + nowtime1->tm_year)).append("-").append(std::to_string(1 + nowtime1->tm_mon)).append("-").append(std::to_string(nowtime1->tm_mday)).append(" ").append(std::to_string(nowtime1->tm_hour)).append("-").append(std::to_string(nowtime1->tm_min)).append("-").append(std::to_string(nowtime1->tm_sec)); + WriteLog("提示:中间数据表访问成功\n"); + char sql1[1024] = "\0"; + sprintf(sql1, "update DFL_DRAWING_TO_SRM_TASK set starttime = '%s' where flowid = '%s'", dealBeginTime.c_str(), flow_uid); + WriteLog("提示:sql1==%s\n", sql1); + if (ExecuteSQLNoInputParam(sql1) == -1) + { + WriteLog("提示:数据插入 失败, %s \n", sql1); + return 1; + } + else { + ExecuteSQLNoInputParam("commit"); + } + } + //1.下载文件到ftp目录 + time_t curtime2; + time(&curtime2); + tm* nowtime = localtime(&curtime2); + // 输出tm结构的年月日 + cout << "年: " << 1900 + nowtime->tm_year << endl; + cout << "月: " << 1 + nowtime->tm_mon << endl; + cout << "日: " << nowtime->tm_mday << endl; + string urlCreateTime; + urlCreateTime.append(std::to_string(1900 + nowtime->tm_year)).append("-").append(std::to_string(1 + nowtime->tm_mon)).append("-").append(std::to_string(nowtime->tm_mday)).append(" ").append(std::to_string(nowtime->tm_hour)).append("-").append(std::to_string(nowtime->tm_min)).append("-").append(std::to_string(nowtime->tm_sec)); + //拼接文件夹 年-》月-》日 + //创建文件夹 + string mdCommandYear = "md "; + string mdCommandMonth = "md "; + string mdCommandDay = "md "; + //string localPath = "C:\\Siemens\\ftp\\"; + string localPath = ""; + string dPath = localPath.append(position).append(std::to_string(1900 + nowtime->tm_year));//文件夹年路径 + WriteLog("position11111111111->%s", position); + WriteLog("dPath1->%s", dPath.c_str()); + //创建目录 复制文件 + if (_access(dPath.c_str(), 0) != 0) {//判断年是否存在 + //创建年 + system(mdCommandYear.append(dPath).c_str()); + } + + dPath.append("\\").append(std::to_string(1 + nowtime->tm_mon)); + WriteLog("dPath2->%s", dPath.c_str()); + if (_access(dPath.c_str(), 0) != 0) {//判断月是否存在 + //创建月 + system(mdCommandMonth.append(dPath).c_str()); + } + + dPath.append("\\").append(std::to_string(nowtime->tm_mday)); + WriteLog("dPath3->%s", dPath.c_str()); + if (_access(dPath.c_str(), 0) != 0) {//判断日是否存在 + //创建日 + system(mdCommandDay.append(dPath).c_str()); + //数据集文件下载该目录 + IMF_export_file(ref_object[0], exportName.append(dPath).append("\\").append(origin_file_name).c_str()); + } + else { + IMF_export_file(ref_object[0], exportName.append(dPath).append("\\").append(origin_file_name).c_str()); + } + //3.封装数据存入 信息写入DFL_ DRAWING_TO_SRM_DETIALS + urlName.append(tomcatIp).append(std::to_string(1900 + nowtime->tm_year)).append("\\").append(std::to_string(1 + nowtime->tm_mon)).append("\\").append(std::to_string(nowtime->tm_mday)).append("\\").append(origin_file_name); + ITKCALL(AOM_ask_value_string(tagt1, "item_id", &itemId)); + ITKCALL(AOM_ask_value_string(tagt1, "object_name", &objectname)); + ITKCALL(AOM_ask_value_string(dataset_tags[k], "object_name", &datesetname)); + ITKCALL(AOM_ask_value_string(tagt1, "item_revision_id", &revision)); + //发布状态 + int wl_release_count = 0; + tag_t* wl_release_tags = NULL; + char* released_str; + //获取发布状态 + ITKCALL(AOM_ask_value_tags(dataset_tags[k], "release_status_list", &wl_release_count, &wl_release_tags)); + WriteLog("发布=>%d", wl_release_count); + if (wl_release_count > 0) { + //发布状态给0,封存状态给1(T2_D),其余状态都是0,取最后一次发布的状态 + tag_t released_tag = wl_release_tags[wl_release_count-1]; + ITKCALL(AOM_ask_value_string(released_tag, "object_name", &released_str)); + WriteLog("released_str=%s\n", released_str); + if (strcmp(released_str,"T2_D")==0) { + released = 1; + } + } + ITKCALL(AOM_ask_value_date(dataset_tags[k], "creation_date", &createtime)); + ITKCALL(DATE_date_to_string(createtime, "%Y-%m-%d %H:%M:%S", &createtime_str)); + ITKCALL(AOM_ask_value_date(dataset_tags[k], "last_mod_date", &updatetime)); + ITKCALL(DATE_date_to_string(updatetime, "%Y-%m-%d %H:%M:%S", &updatetime_str)); + //urlcreatetime + //调用sql插入数据 + if (juede == 1) { + char sql2[1024] = "\0"; + sprintf(sql2, "insert into DFL_DRAWING_TO_SRM_DETIALS(itemid,objectname,datesetname,fileurl,revision,released,createtime,updatetime,urlcreatetime,urlstatus) values('%s','%s','%s','%s','%s',%d,'%s','%s','%s','%s')", itemId,objectname,datesetname, urlName.c_str(),revision,released,createtime_str,updatetime_str, urlCreateTime.c_str(),"未同步"); + WriteLog("提示:sql2==%s\n", sql2); + if (ExecuteSQLNoInputParam(sql2) == -1) + { + WriteLog("提示:数据插入 失败, %s \n", sql2); + return 1; + } + else { + ExecuteSQLNoInputParam("commit"); + } + } + //4.调用SRM接口 + //拼接json + cJSON* array = cJSON_CreateArray(); + cJSON* data = cJSON_CreateObject(); + cJSON_AddStringToObject(data, "materialCode", itemId); + cJSON_AddStringToObject(data, "materialName", GbkToUtf8(objectname).c_str()); + cJSON_AddStringToObject(data, "materialDrawingName", GbkToUtf8(datesetname).c_str()); + cJSON_AddStringToObject(data, "fileUrl", GbkToUtf8(urlName).c_str()); + cJSON_AddStringToObject(data, "version", revision); + cJSON_AddStringToObject(data, "status", std::to_string(released).c_str()); + cJSON_AddStringToObject(data, "createTime", createtime_str); + cJSON_AddStringToObject(data, "publishTime", updatetime_str); + cJSON_AddItemToArray(array, data); + //发json + CURL* curl; + CURLcode res; + curl = curl_easy_init(); + if (curl) { + stringstream out; + curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); + //curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.1.68/gateway/serviceApi/invoke/QZbycode/DFL-SRM-005"); + curl_easy_setopt(curl, CURLOPT_URL, url); + curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); + curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https"); + struct curl_slist* headers = NULL; + headers = curl_slist_append(headers, "Content-Type: application/json"); + headers = curl_slist_append(headers, "Authorization: Basic UExNOkFmdGpzcFBQWW1DU2pNaWNROWh3U3htNDJ4eXpXUkhi"); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); + //const char* data = "[{\r\n \"materialCode\": \"1\",\r\n \"materialName\": \"物料TEST001\",\r\n \"materialDrawingName\": \"图纸名称\",\r\n \"fileUrl\": \"www.baidu.com\",\r\n \"version\": \"1.1\",\r\n \"status\": \"\",\r\n \"createTime\": \"2023-11-26 11:11:10\",\r\n \"publishTime\": \"2023-11-27 11:11:10\"\r\n}]\r\n"; + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out); + char* json_to_char = NULL; + WriteLog("JSON拼接完成\n"); + /* 打印JSON对象(整条链表)的所有数据 */ + json_to_char = cJSON_Print(array); + //cout << "JSON:" << json_to_char << endl; + WriteLog("json->%s\n",U2G(json_to_char) ); + curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_to_char); + WriteLog("9\n"); + res = curl_easy_perform(curl); + //设置写数据 + + if (res != CURLE_OK) { + WriteLog("curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); + } + else { + + WriteLog("====>>>>OK\n"); + + } + long retcode = 0; + CURLcode code = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &retcode); + WriteLog("====>>>>retcode:%d\n", retcode); + if (code != CURLE_OK || retcode != 200) + { + WriteLog("发送数据给ERP失败\n"); + return 1; + } + else + { + WriteLog("发送数据给ERP成功\n"); + + } + string str_json = out.str(); + WriteLog("return Msg===>%s\n", U2G(str_json.c_str())); + //5.如果接口调用成功了 修改两张表 + char* a = "同步成功"; + if (strstr(U2G(str_json.c_str()), a) != NULL) {//存在 + //task表 + time_t curtime3; + time(&curtime3); + tm* nowtime3 = localtime(&curtime3); + // 输出tm结构的年月日 + cout << "年: " << 1900 + nowtime3->tm_year << endl; + cout << "月: " << 1 + nowtime3->tm_mon << endl; + cout << "日: " << nowtime3->tm_mday << endl; + finishtime.append(std::to_string(1900 + nowtime3->tm_year)).append("-").append(std::to_string(1 + nowtime3->tm_mon)).append("-").append(std::to_string(nowtime3->tm_mday)).append(" ").append(std::to_string(nowtime3->tm_hour)).append("-").append(std::to_string(nowtime3->tm_min)).append("-").append(std::to_string(nowtime3->tm_sec)); + + char sql3[1024] = "\0"; + sprintf(sql3, "update DFL_DRAWING_TO_SRM_TASK set finishtime = '%s',status = '%s' where flowid = '%s'", finishtime.c_str(), "已推送", flow_uid); + WriteLog("提示:sql3==%s\n", sql3); + if (ExecuteSQLNoInputParam(sql3) == -1) + { + WriteLog("提示:数据插入 失败, %s \n", sql3); + return 1; + } + else { + ExecuteSQLNoInputParam("commit"); + } + + + //detail表 + char sql4[1024] = "\0"; + sprintf(sql4, "update DFL_DRAWING_TO_SRM_DETIALS set urlstatus = '%s' where itemid = '%s' and revision = '%s'", "已同步", itemId,revision); + WriteLog("提示:sql4==%s\n", sql4); + if (ExecuteSQLNoInputParam(sql4) == -1) + { + WriteLog("提示:数据插入 失败, %s \n", sql4); + return 1; + } + else { + ExecuteSQLNoInputParam("commit"); + } + } + else { + char sql5[1024] = "\0"; + sprintf(sql5, "update DFL_DRAWING_TO_SRM_DETIALS set urlstatus = '%s' where itemid = '%s' and revision = '%s'", "同步失败", itemId, revision); + WriteLog("提示:sql5==%s\n", sql5); + if (ExecuteSQLNoInputParam(sql5) == -1) + { + WriteLog("提示:数据插入 失败, %s \n", sql5); + return 1; + } + else { + ExecuteSQLNoInputParam("commit"); + } + } + } + curl_easy_cleanup(curl); + + + } + } + } + } + + } + + + POM_AM__set_application_bypass(false); + WriteLog("===================================\n"); + WriteLog("WL to SRM end\n"); + WriteLog("===================================\n"); + return ifail; +} + + +int ITK_user_main(int argc, char* argv[]) +{ + char* log_file = NULL; + + printf("创建日志文件\n"); + char* TO_SRM = (char*)malloc(sizeof("TO_SRM")); + strcpy(TO_SRM, "TO_SRM"); + CreateLogFile(TO_SRM, &log_file); + int ifail = ITK_ok; + int len; + int outputValueCount; + char* pbuf = NULL; + char* tc_name, *tc_pwd, *tc_group; + int c_sql_value_count = 0; + char** option_values; + tc_name = ITK_ask_cli_argument("-u="); + tc_pwd = ITK_ask_cli_argument("-p="); + tc_group = ITK_ask_cli_argument("-g="); + const char* flowuid = NULL; + const char* user_id = NULL; + char*** flowUID_values=NULL; + WriteLog("name= %s\n", tc_name); + WriteLog("pwd= %s\n", tc_pwd); + WriteLog("group= %s\n", tc_group); + ifail = TC_init_module(tc_name, tc_pwd, tc_group); + if (ifail != ITK_ok) { + WriteLog("login fail! \n"); + return ifail; + } + else { WriteLog("login>>>>> \n"); } + //获取首选项的值 + ITKCALL(PREF_ask_char_values("DFL2_SQL_Connect2", &c_sql_value_count, &option_values)); + if (c_sql_value_count != 3) + { + WriteLog("The preferences are incorrectly configured!\n"); + return 0; + } + + + WriteLog("===================================\n"); + WriteLog("get flowUID begin\n"); + WriteLog("===================================\n"); + int outputColumn = 0; + if (ConnServer(option_values[1], option_values[2], option_values[0]))//"tc11","infodba","//172.16.50.40/tc11" "TC12","infodba","172.16.68.13/tc1" + { + WriteLog("Info: Failed to access the data table\n"); + return NULL; + } + else { + WriteLog("Info: The data table is accessed successfully\n"); + char sql_cx[1024] = "\0"; + sprintf(sql_cx, "select flowid from DFL_DRAWING_TO_SRM_TASK where STATUS ='未开始'ORDER BY CODE ASC"); + WriteLog("Tip: Process UID query started\n"); + WriteLog("Info:sql==%s\n", sql_cx); + if (QuerySQLNoInputParam(sql_cx, &outputColumn, &outputValueCount, &flowUID_values) == -1) + { + WriteLog("Info: Failed to query the process UID. %s \n", sql_cx); + return NULL; + } + if (outputValueCount <= 0) { + WriteLog("Info:Workflow data was not queried!\n"); + DisConnServer(); + return NULL; + } + WriteLog("Info: The process UID query is complete!\n"); + WriteLog("outputValueCount=%d\n", outputValueCount); + WriteLog("outputColumn=%d\n", outputColumn); + + WriteLog("===================================\n"); + WriteLog("get flowUID end\n"); + WriteLog("===================================\n"); + + } + + + flowuid = flowUID_values[0][0]; + + WriteLog("flowUID is:%s\n", flowuid); + ifail = DFL_WL_TO_SRM(option_values, flowuid); + DisConnServer(); + CloseLog(); + return ifail; +} + + + + + + diff --git a/DFL_WL_BOM_TOERP/cJSON.c b/DFL_WL_BOM_TOERP/cJSON.c new file mode 100644 index 0000000..b4d6136 --- /dev/null +++ b/DFL_WL_BOM_TOERP/cJSON.c @@ -0,0 +1,758 @@ +#pragma once +/* + Copyright (c) 2009 Dave Gamble + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +/* cJSON */ +/* JSON parser in C. */ + +#include +#include +#include +#include +#include +#include +#include +#include "cJSON.h" +#pragma warning(disable : 4996) +static const char* ep; + +const char* cJSON_GetErrorPtr(void) { return ep; } + +static int cJSON_strcasecmp(const char* s1, const char* s2) +{ + if (!s1) return (s1 == s2) ? 0 : 1;if (!s2) return 1; + for (; tolower(*s1) == tolower(*s2); ++s1, ++s2) if (*s1 == 0) return 0; + return tolower(*(const unsigned char*)s1) - tolower(*(const unsigned char*)s2); +} + +static void* (*cJSON_malloc)(size_t sz) = malloc; +static void (*cJSON_free)(void* ptr) = free; + +static char* cJSON_strdup(const char* str) +{ + size_t len; + char* copy; + + len = strlen(str) + 1; + if (!(copy = (char*)cJSON_malloc(len))) return 0; + memcpy(copy, str, len); + return copy; +} + +void cJSON_InitHooks(cJSON_Hooks* hooks) +{ + if (!hooks) { /* Reset hooks */ + cJSON_malloc = malloc; + cJSON_free = free; + return; + } + + cJSON_malloc = (hooks->malloc_fn) ? hooks->malloc_fn : malloc; + cJSON_free = (hooks->free_fn) ? hooks->free_fn : free; +} + +/* Internal constructor. */ +static cJSON* cJSON_New_Item(void) +{ + cJSON* node = (cJSON*)cJSON_malloc(sizeof(cJSON)); + if (node) memset(node, 0, sizeof(cJSON)); + return node; +} + +/* Delete a cJSON structure. */ +void cJSON_Delete(cJSON* c) +{ + cJSON* next; + while (c) + { + next = c->next; + if (!(c->type & cJSON_IsReference) && c->child) cJSON_Delete(c->child); + if (!(c->type & cJSON_IsReference) && c->valuestring) cJSON_free(c->valuestring); + if (!(c->type & cJSON_StringIsConst) && c->string) cJSON_free(c->string); + cJSON_free(c); + c = next; + } +} + +/* Parse the input text to generate a number, and populate the result into item. */ +static const char* parse_number(cJSON* item, const char* num) +{ + double n = 0, sign = 1, scale = 0;int subscale = 0, signsubscale = 1; + + if (*num == '-') sign = -1, num++; /* Has sign? */ + if (*num == '0') num++; /* is zero */ + if (*num >= '1' && *num <= '9') do n = (n * 10.0) + (*num++ - '0'); while (*num >= '0' && *num <= '9'); /* Number? */ + if (*num == '.' && num[1] >= '0' && num[1] <= '9') { num++; do n = (n * 10.0) + (*num++ - '0'), scale--; while (*num >= '0' && *num <= '9'); } /* Fractional part? */ + if (*num == 'e' || *num == 'E') /* Exponent? */ + { + num++;if (*num == '+') num++; else if (*num == '-') signsubscale = -1, num++; /* With sign? */ + while (*num >= '0' && *num <= '9') subscale = (subscale * 10) + (*num++ - '0'); /* Number? */ + } + + n = sign * n * pow(10.0, (scale + subscale * signsubscale)); /* number = +/- number.fraction * 10^+/- exponent */ + + item->valuedouble = n; + item->valueint = (int)n; + item->type = cJSON_Number; + return num; +} + +static int pow2gt(int x) { --x; x |= x >> 1; x |= x >> 2; x |= x >> 4; x |= x >> 8; x |= x >> 16; return x + 1; } + +typedef struct { char* buffer; int length; int offset; } printbuffer; + +static char* ensure(printbuffer* p, int needed) +{ + char* newbuffer;int newsize; + if (!p || !p->buffer) return 0; + needed += p->offset; + if (needed <= p->length) return p->buffer + p->offset; + + newsize = pow2gt(needed); + newbuffer = (char*)cJSON_malloc(newsize); + if (!newbuffer) { cJSON_free(p->buffer);p->length = 0, p->buffer = 0;return 0; } + if (newbuffer) memcpy(newbuffer, p->buffer, p->length); + cJSON_free(p->buffer); + p->length = newsize; + p->buffer = newbuffer; + return newbuffer + p->offset; +} + +static int update(printbuffer* p) +{ + char* str; + if (!p || !p->buffer) return 0; + str = p->buffer + p->offset; + return p->offset + strlen(str); +} + +/* Render the number nicely from the given item into a string. */ +static char* print_number(cJSON* item, printbuffer* p) +{ + char* str = 0; + double d = item->valuedouble; + if (d == 0) + { + if (p) str = ensure(p, 2); + else str = (char*)cJSON_malloc(2); /* special case for 0. */ + if (str) strcpy(str, "0"); + } + else if (fabs(((double)item->valueint) - d) <= DBL_EPSILON && d <= INT_MAX && d >= INT_MIN) + { + if (p) str = ensure(p, 21); + else str = (char*)cJSON_malloc(21); /* 2^64+1 can be represented in 21 chars. */ + if (str) sprintf(str, "%d", item->valueint); + } + else + { + if (p) str = ensure(p, 64); + else str = (char*)cJSON_malloc(64); /* This is a nice tradeoff. */ + if (str) + { + if (fabs(floor(d) - d) <= DBL_EPSILON && fabs(d) < 1.0e60)sprintf(str, "%.0f", d); + else if (fabs(d) < 1.0e-6 || fabs(d) > 1.0e9) sprintf(str, "%e", d); + else sprintf(str, "%f", d); + } + } + return str; +} + +static unsigned parse_hex4(const char* str) +{ + unsigned h = 0; + if (*str >= '0' && *str <= '9') h += (*str) - '0'; else if (*str >= 'A' && *str <= 'F') h += 10 + (*str) - 'A'; else if (*str >= 'a' && *str <= 'f') h += 10 + (*str) - 'a'; else return 0; + h = h << 4;str++; + if (*str >= '0' && *str <= '9') h += (*str) - '0'; else if (*str >= 'A' && *str <= 'F') h += 10 + (*str) - 'A'; else if (*str >= 'a' && *str <= 'f') h += 10 + (*str) - 'a'; else return 0; + h = h << 4;str++; + if (*str >= '0' && *str <= '9') h += (*str) - '0'; else if (*str >= 'A' && *str <= 'F') h += 10 + (*str) - 'A'; else if (*str >= 'a' && *str <= 'f') h += 10 + (*str) - 'a'; else return 0; + h = h << 4;str++; + if (*str >= '0' && *str <= '9') h += (*str) - '0'; else if (*str >= 'A' && *str <= 'F') h += 10 + (*str) - 'A'; else if (*str >= 'a' && *str <= 'f') h += 10 + (*str) - 'a'; else return 0; + return h; +} + +/* Parse the input text into an unescaped cstring, and populate item. */ +static const unsigned char firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; +static const char* parse_string(cJSON* item, const char* str) +{ + const char* ptr = str + 1;char* ptr2;char* out;int len = 0;unsigned uc, uc2; + if (*str != '\"') { ep = str;return 0; } /* not a string! */ + + while (*ptr != '\"' && *ptr && ++len) if (*ptr++ == '\\') ptr++; /* Skip escaped quotes. */ + + out = (char*)cJSON_malloc(len + 1); /* This is how long we need for the string, roughly. */ + if (!out) return 0; + + ptr = str + 1;ptr2 = out; + while (*ptr != '\"' && *ptr) + { + if (*ptr != '\\') *ptr2++ = *ptr++; + else + { + ptr++; + switch (*ptr) + { + case 'b': *ptr2++ = '\b'; break; + case 'f': *ptr2++ = '\f'; break; + case 'n': *ptr2++ = '\n'; break; + case 'r': *ptr2++ = '\r'; break; + case 't': *ptr2++ = '\t'; break; + case 'u': /* transcode utf16 to utf8. */ + uc = parse_hex4(ptr + 1);ptr += 4; /* get the unicode char. */ + + if ((uc >= 0xDC00 && uc <= 0xDFFF) || uc == 0) break; /* check for invalid. */ + + if (uc >= 0xD800 && uc <= 0xDBFF) /* UTF16 surrogate pairs. */ + { + if (ptr[1] != '\\' || ptr[2] != 'u') break; /* missing second-half of surrogate. */ + uc2 = parse_hex4(ptr + 3);ptr += 6; + if (uc2 < 0xDC00 || uc2>0xDFFF) break; /* invalid second-half of surrogate. */ + uc = 0x10000 + (((uc & 0x3FF) << 10) | (uc2 & 0x3FF)); + } + + len = 4;if (uc < 0x80) len = 1;else if (uc < 0x800) len = 2;else if (uc < 0x10000) len = 3; ptr2 += len; + + switch (len) { + case 4: *--ptr2 = ((uc | 0x80) & 0xBF); uc >>= 6; + case 3: *--ptr2 = ((uc | 0x80) & 0xBF); uc >>= 6; + case 2: *--ptr2 = ((uc | 0x80) & 0xBF); uc >>= 6; + case 1: *--ptr2 = (uc | firstByteMark[len]); + } + ptr2 += len; + break; + default: *ptr2++ = *ptr; break; + } + ptr++; + } + } + *ptr2 = 0; + if (*ptr == '\"') ptr++; + item->valuestring = out; + item->type = cJSON_String; + return ptr; +} + +/* Render the cstring provided to an escaped version that can be printed. */ +static char* print_string_ptr(const char* str, printbuffer* p) +{ + const char* ptr;char* ptr2, * out;int len = 0, flag = 0;unsigned char token; + + for (ptr = str;*ptr;ptr++) flag |= ((*ptr > 0 && *ptr < 32) || (*ptr == '\"') || (*ptr == '\\')) ? 1 : 0; + if (!flag) + { + len = ptr - str; + if (p) out = ensure(p, len + 3); + else out = (char*)cJSON_malloc(len + 3); + if (!out) return 0; + ptr2 = out;*ptr2++ = '\"'; + strcpy(ptr2, str); + ptr2[len] = '\"'; + ptr2[len + 1] = 0; + return out; + } + + if (!str) + { + if (p) out = ensure(p, 3); + else out = (char*)cJSON_malloc(3); + if (!out) return 0; + strcpy(out, "\"\""); + return out; + } + ptr = str;while ((token = *ptr) && ++len) { if (strchr("\"\\\b\f\n\r\t", token)) len++; else if (token < 32) len += 5;ptr++; } + + if (p) out = ensure(p, len + 3); + else out = (char*)cJSON_malloc(len + 3); + if (!out) return 0; + + ptr2 = out;ptr = str; + *ptr2++ = '\"'; + while (*ptr) + { + if ((unsigned char)*ptr > 31 && *ptr != '\"' && *ptr != '\\') *ptr2++ = *ptr++; + else + { + *ptr2++ = '\\'; + switch (token = *ptr++) + { + case '\\': *ptr2++ = '\\'; break; + case '\"': *ptr2++ = '\"'; break; + case '\b': *ptr2++ = 'b'; break; + case '\f': *ptr2++ = 'f'; break; + case '\n': *ptr2++ = 'n'; break; + case '\r': *ptr2++ = 'r'; break; + case '\t': *ptr2++ = 't'; break; + default: sprintf(ptr2, "u%04x", token);ptr2 += 5; break; /* escape and print */ + } + } + } + *ptr2++ = '\"';*ptr2++ = 0; + return out; +} +/* Invote print_string_ptr (which is useful) on an item. */ +static char* print_string(cJSON* item, printbuffer* p) { return print_string_ptr(item->valuestring, p); } + +/* Predeclare these prototypes. */ +static const char* parse_value(cJSON* item, const char* value); +static char* print_value(cJSON* item, int depth, int fmt, printbuffer* p); +static const char* parse_array(cJSON* item, const char* value); +static char* print_array(cJSON* item, int depth, int fmt, printbuffer* p); +static const char* parse_object(cJSON* item, const char* value); +static char* print_object(cJSON* item, int depth, int fmt, printbuffer* p); + +/* Utility to jump whitespace and cr/lf */ +static const char* skip(const char* in) { while (in && *in && (unsigned char)*in <= 32) in++; return in; } + +/* Parse an object - create a new root, and populate. */ +cJSON* cJSON_ParseWithOpts(const char* value, const char** return_parse_end, int require_null_terminated) +{ + const char* end = 0; + cJSON* c = cJSON_New_Item(); + ep = 0; + if (!c) return 0; /* memory fail */ + + end = parse_value(c, skip(value)); + if (!end) { cJSON_Delete(c);return 0; } /* parse failure. ep is set. */ + + /* if we require null-terminated JSON without appended garbage, skip and then check for a null terminator */ + if (require_null_terminated) { end = skip(end);if (*end) { cJSON_Delete(c);ep = end;return 0; } } + if (return_parse_end) *return_parse_end = end; + return c; +} +/* Default options for cJSON_Parse */ +cJSON* cJSON_Parse(const char* value) { return cJSON_ParseWithOpts(value, 0, 0); } + +/* Render a cJSON item/entity/structure to text. */ +char* cJSON_Print(cJSON* item) { return print_value(item, 0, 1, 0); } +char* cJSON_PrintUnformatted(cJSON* item) { return print_value(item, 0, 0, 0); } + +char* cJSON_PrintBuffered(cJSON* item, int prebuffer, int fmt) +{ + printbuffer p; + p.buffer = (char*)cJSON_malloc(prebuffer); + p.length = prebuffer; + p.offset = 0; + return print_value(item, 0, fmt, &p); + return p.buffer; +} + + +/* Parser core - when encountering text, process appropriately. */ +static const char* parse_value(cJSON* item, const char* value) +{ + if (!value) return 0; /* Fail on null. */ + if (!strncmp(value, "null", 4)) { item->type = cJSON_NULL; return value + 4; } + if (!strncmp(value, "false", 5)) { item->type = cJSON_False; return value + 5; } + if (!strncmp(value, "true", 4)) { item->type = cJSON_True; item->valueint = 1; return value + 4; } + if (*value == '\"') { return parse_string(item, value); } + if (*value == '-' || (*value >= '0' && *value <= '9')) { return parse_number(item, value); } + if (*value == '[') { return parse_array(item, value); } + if (*value == '{') { return parse_object(item, value); } + + ep = value;return 0; /* failure. */ +} + +/* Render a value to text. */ +static char* print_value(cJSON* item, int depth, int fmt, printbuffer* p) +{ + char* out = 0; + if (!item) return 0; + if (p) + { + switch ((item->type) & 255) + { + case cJSON_NULL: {out = ensure(p, 5); if (out) strcpy(out, "null"); break;} + case cJSON_False: {out = ensure(p, 6); if (out) strcpy(out, "false"); break;} + case cJSON_True: {out = ensure(p, 5); if (out) strcpy(out, "true"); break;} + case cJSON_Number: out = print_number(item, p);break; + case cJSON_String: out = print_string(item, p);break; + case cJSON_Array: out = print_array(item, depth, fmt, p);break; + case cJSON_Object: out = print_object(item, depth, fmt, p);break; + } + } + else + { + switch ((item->type) & 255) + { + case cJSON_NULL: out = cJSON_strdup("null"); break; + case cJSON_False: out = cJSON_strdup("false");break; + case cJSON_True: out = cJSON_strdup("true"); break; + case cJSON_Number: out = print_number(item, 0);break; + case cJSON_String: out = print_string(item, 0);break; + case cJSON_Array: out = print_array(item, depth, fmt, 0);break; + case cJSON_Object: out = print_object(item, depth, fmt, 0);break; + } + } + return out; +} + +/* Build an array from input text. */ +static const char* parse_array(cJSON* item, const char* value) +{ + cJSON* child; + if (*value != '[') { ep = value;return 0; } /* not an array! */ + + item->type = cJSON_Array; + value = skip(value + 1); + if (*value == ']') return value + 1; /* empty array. */ + + item->child = child = cJSON_New_Item(); + if (!item->child) return 0; /* memory fail */ + value = skip(parse_value(child, skip(value))); /* skip any spacing, get the value. */ + if (!value) return 0; + + while (*value == ',') + { + cJSON* new_item; + if (!(new_item = cJSON_New_Item())) return 0; /* memory fail */ + child->next = new_item;new_item->prev = child;child = new_item; + value = skip(parse_value(child, skip(value + 1))); + if (!value) return 0; /* memory fail */ + } + + if (*value == ']') return value + 1; /* end of array */ + ep = value;return 0; /* malformed. */ +} + +/* Render an array to text */ +static char* print_array(cJSON* item, int depth, int fmt, printbuffer* p) +{ + char** entries; + char* out = 0, * ptr, * ret;int len = 5; + cJSON* child = item->child; + int numentries = 0, i = 0, fail = 0; + size_t tmplen = 0; + + /* How many entries in the array? */ + while (child) numentries++, child = child->next; + /* Explicitly handle numentries==0 */ + if (!numentries) + { + if (p) out = ensure(p, 3); + else out = (char*)cJSON_malloc(3); + if (out) strcpy(out, "[]"); + return out; + } + + if (p) + { + /* Compose the output array. */ + i = p->offset; + ptr = ensure(p, 1);if (!ptr) return 0; *ptr = '['; p->offset++; + child = item->child; + while (child && !fail) + { + print_value(child, depth + 1, fmt, p); + p->offset = update(p); + if (child->next) { len = fmt ? 2 : 1;ptr = ensure(p, len + 1);if (!ptr) return 0;*ptr++ = ',';if (fmt)*ptr++ = ' ';*ptr = 0;p->offset += len; } + child = child->next; + } + ptr = ensure(p, 2);if (!ptr) return 0; *ptr++ = ']';*ptr = 0; + out = (p->buffer) + i; + } + else + { + /* Allocate an array to hold the values for each */ + entries = (char**)cJSON_malloc(numentries * sizeof(char*)); + if (!entries) return 0; + memset(entries, 0, numentries * sizeof(char*)); + /* Retrieve all the results: */ + child = item->child; + while (child && !fail) + { + ret = print_value(child, depth + 1, fmt, 0); + entries[i++] = ret; + if (ret) len += strlen(ret) + 2 + (fmt ? 1 : 0); else fail = 1; + child = child->next; + } + + /* If we didn't fail, try to malloc the output string */ + if (!fail) out = (char*)cJSON_malloc(len); + /* If that fails, we fail. */ + if (!out) fail = 1; + + /* Handle failure. */ + if (fail) + { + for (i = 0;i < numentries;i++) if (entries[i]) cJSON_free(entries[i]); + cJSON_free(entries); + return 0; + } + + /* Compose the output array. */ + *out = '['; + ptr = out + 1;*ptr = 0; + for (i = 0;i < numentries;i++) + { + tmplen = strlen(entries[i]);memcpy(ptr, entries[i], tmplen);ptr += tmplen; + if (i != numentries - 1) { *ptr++ = ',';if (fmt)*ptr++ = ' ';*ptr = 0; } + cJSON_free(entries[i]); + } + cJSON_free(entries); + *ptr++ = ']';*ptr++ = 0; + } + return out; +} + +/* Build an object from the text. */ +static const char* parse_object(cJSON* item, const char* value) +{ + cJSON* child; + if (*value != '{') { ep = value;return 0; } /* not an object! */ + + item->type = cJSON_Object; + value = skip(value + 1); + if (*value == '}') return value + 1; /* empty array. */ + + item->child = child = cJSON_New_Item(); + if (!item->child) return 0; + value = skip(parse_string(child, skip(value))); + if (!value) return 0; + child->string = child->valuestring;child->valuestring = 0; + if (*value != ':') { ep = value;return 0; } /* fail! */ + value = skip(parse_value(child, skip(value + 1))); /* skip any spacing, get the value. */ + if (!value) return 0; + + while (*value == ',') + { + cJSON* new_item; + if (!(new_item = cJSON_New_Item())) return 0; /* memory fail */ + child->next = new_item;new_item->prev = child;child = new_item; + value = skip(parse_string(child, skip(value + 1))); + if (!value) return 0; + child->string = child->valuestring;child->valuestring = 0; + if (*value != ':') { ep = value;return 0; } /* fail! */ + value = skip(parse_value(child, skip(value + 1))); /* skip any spacing, get the value. */ + if (!value) return 0; + } + + if (*value == '}') return value + 1; /* end of array */ + ep = value;return 0; /* malformed. */ +} + +/* Render an object to text. */ +static char* print_object(cJSON* item, int depth, int fmt, printbuffer* p) +{ + char** entries = 0, ** names = 0; + char* out = 0, * ptr, * ret, * str;int len = 7, i = 0, j; + cJSON* child = item->child; + int numentries = 0, fail = 0; + size_t tmplen = 0; + /* Count the number of entries. */ + while (child) numentries++, child = child->next; + /* Explicitly handle empty object case */ + if (!numentries) + { + if (p) out = ensure(p, fmt ? depth + 4 : 3); + else out = (char*)cJSON_malloc(fmt ? depth + 4 : 3); + if (!out) return 0; + ptr = out;*ptr++ = '{'; + if (fmt) { *ptr++ = '\n';for (i = 0;i < depth - 1;i++) *ptr++ = '\t'; } + *ptr++ = '}';*ptr++ = 0; + return out; + } + if (p) + { + /* Compose the output: */ + i = p->offset; + len = fmt ? 2 : 1; ptr = ensure(p, len + 1); if (!ptr) return 0; + *ptr++ = '{'; if (fmt) *ptr++ = '\n'; *ptr = 0; p->offset += len; + child = item->child;depth++; + while (child) + { + if (fmt) + { + ptr = ensure(p, depth); if (!ptr) return 0; + for (j = 0;j < depth;j++) *ptr++ = '\t'; + p->offset += depth; + } + print_string_ptr(child->string, p); + p->offset = update(p); + + len = fmt ? 2 : 1; + ptr = ensure(p, len); if (!ptr) return 0; + *ptr++ = ':';if (fmt) *ptr++ = '\t'; + p->offset += len; + + print_value(child, depth, fmt, p); + p->offset = update(p); + + len = (fmt ? 1 : 0) + (child->next ? 1 : 0); + ptr = ensure(p, len + 1); if (!ptr) return 0; + if (child->next) *ptr++ = ','; + if (fmt) *ptr++ = '\n';*ptr = 0; + p->offset += len; + child = child->next; + } + ptr = ensure(p, fmt ? (depth + 1) : 2); if (!ptr) return 0; + if (fmt) for (i = 0;i < depth - 1;i++) *ptr++ = '\t'; + *ptr++ = '}';*ptr = 0; + out = (p->buffer) + i; + } + else + { + /* Allocate space for the names and the objects */ + entries = (char**)cJSON_malloc(numentries * sizeof(char*)); + if (!entries) return 0; + names = (char**)cJSON_malloc(numentries * sizeof(char*)); + if (!names) { cJSON_free(entries);return 0; } + memset(entries, 0, sizeof(char*) * numentries); + memset(names, 0, sizeof(char*) * numentries); + + /* Collect all the results into our arrays: */ + child = item->child;depth++;if (fmt) len += depth; + while (child) + { + names[i] = str = print_string_ptr(child->string, 0); + entries[i++] = ret = print_value(child, depth, fmt, 0); + if (str && ret) len += strlen(ret) + strlen(str) + 2 + (fmt ? 2 + depth : 0); else fail = 1; + child = child->next; + } + + /* Try to allocate the output string */ + if (!fail) out = (char*)cJSON_malloc(len); + if (!out) fail = 1; + + /* Handle failure */ + if (fail) + { + for (i = 0;i < numentries;i++) { if (names[i]) cJSON_free(names[i]);if (entries[i]) cJSON_free(entries[i]); } + cJSON_free(names);cJSON_free(entries); + return 0; + } + + /* Compose the output: */ + *out = '{';ptr = out + 1;if (fmt)*ptr++ = '\n';*ptr = 0; + for (i = 0;i < numentries;i++) + { + if (fmt) for (j = 0;j < depth;j++) *ptr++ = '\t'; + tmplen = strlen(names[i]);memcpy(ptr, names[i], tmplen);ptr += tmplen; + *ptr++ = ':';if (fmt) *ptr++ = '\t'; + strcpy(ptr, entries[i]);ptr += strlen(entries[i]); + if (i != numentries - 1) *ptr++ = ','; + if (fmt) *ptr++ = '\n';*ptr = 0; + cJSON_free(names[i]);cJSON_free(entries[i]); + } + + cJSON_free(names);cJSON_free(entries); + if (fmt) for (i = 0;i < depth - 1;i++) *ptr++ = '\t'; + *ptr++ = '}';*ptr++ = 0; + } + return out; +} + +/* Get Array size/item / object item. */ +int cJSON_GetArraySize(cJSON* array) { cJSON* c = array->child;int i = 0;while (c)i++, c = c->next;return i; } +cJSON* cJSON_GetArrayItem(cJSON* array, int item) { cJSON* c = array->child; while (c && item > 0) item--, c = c->next; return c; } +cJSON* cJSON_GetObjectItem(cJSON* object, const char* string) { cJSON* c = object->child; while (c && cJSON_strcasecmp(c->string, string)) c = c->next; return c; } + +/* Utility for array list handling. */ +static void suffix_object(cJSON* prev, cJSON* item) { prev->next = item;item->prev = prev; } +/* Utility for handling references. */ +static cJSON* create_reference(cJSON* item) { cJSON* ref = cJSON_New_Item();if (!ref) return 0;memcpy(ref, item, sizeof(cJSON));ref->string = 0;ref->type |= cJSON_IsReference;ref->next = ref->prev = 0;return ref; } + +/* Add item to array/object. */ +void cJSON_AddItemToArray(cJSON* array, cJSON* item) { cJSON* c = array->child;if (!item) return; if (!c) { array->child = item; } else { while (c && c->next) c = c->next; suffix_object(c, item); } } +void cJSON_AddItemToObject(cJSON* object, const char* string, cJSON* item) { if (!item) return; if (item->string) cJSON_free(item->string);item->string = cJSON_strdup(string);cJSON_AddItemToArray(object, item); } +void cJSON_AddItemToObjectCS(cJSON* object, const char* string, cJSON* item) { if (!item) return; if (!(item->type & cJSON_StringIsConst) && item->string) cJSON_free(item->string);item->string = (char*)string;item->type |= cJSON_StringIsConst;cJSON_AddItemToArray(object, item); } +void cJSON_AddItemReferenceToArray(cJSON* array, cJSON* item) { cJSON_AddItemToArray(array, create_reference(item)); } +void cJSON_AddItemReferenceToObject(cJSON* object, const char* string, cJSON* item) { cJSON_AddItemToObject(object, string, create_reference(item)); } + +cJSON* cJSON_DetachItemFromArray(cJSON* array, int which) { + cJSON* c = array->child;while (c && which > 0) c = c->next, which--;if (!c) return 0; + if (c->prev) c->prev->next = c->next;if (c->next) c->next->prev = c->prev;if (c == array->child) array->child = c->next;c->prev = c->next = 0;return c; +} +void cJSON_DeleteItemFromArray(cJSON* array, int which) { cJSON_Delete(cJSON_DetachItemFromArray(array, which)); } +cJSON* cJSON_DetachItemFromObject(cJSON* object, const char* string) { int i = 0;cJSON* c = object->child;while (c && cJSON_strcasecmp(c->string, string)) i++, c = c->next;if (c) return cJSON_DetachItemFromArray(object, i);return 0; } +void cJSON_DeleteItemFromObject(cJSON* object, const char* string) { cJSON_Delete(cJSON_DetachItemFromObject(object, string)); } + +/* Replace array/object items with new ones. */ +void cJSON_InsertItemInArray(cJSON* array, int which, cJSON* newitem) { + cJSON* c = array->child;while (c && which > 0) c = c->next, which--;if (!c) { cJSON_AddItemToArray(array, newitem);return; } + newitem->next = c;newitem->prev = c->prev;c->prev = newitem;if (c == array->child) array->child = newitem; else newitem->prev->next = newitem; +} +void cJSON_ReplaceItemInArray(cJSON* array, int which, cJSON* newitem) { + cJSON* c = array->child;while (c && which > 0) c = c->next, which--;if (!c) return; + newitem->next = c->next;newitem->prev = c->prev;if (newitem->next) newitem->next->prev = newitem; + if (c == array->child) array->child = newitem; else newitem->prev->next = newitem;c->next = c->prev = 0;cJSON_Delete(c); +} +void cJSON_ReplaceItemInObject(cJSON* object, const char* string, cJSON* newitem) { int i = 0;cJSON* c = object->child;while (c && cJSON_strcasecmp(c->string, string))i++, c = c->next;if (c) { newitem->string = cJSON_strdup(string);cJSON_ReplaceItemInArray(object, i, newitem); } } + +/* Create basic types: */ +cJSON* cJSON_CreateNull(void) { cJSON* item = cJSON_New_Item();if (item)item->type = cJSON_NULL;return item; } +cJSON* cJSON_CreateTrue(void) { cJSON* item = cJSON_New_Item();if (item)item->type = cJSON_True;return item; } +cJSON* cJSON_CreateFalse(void) { cJSON* item = cJSON_New_Item();if (item)item->type = cJSON_False;return item; } +cJSON* cJSON_CreateBool(int b) { cJSON* item = cJSON_New_Item();if (item)item->type = b ? cJSON_True : cJSON_False;return item; } +cJSON* cJSON_CreateNumber(double num) { cJSON* item = cJSON_New_Item();if (item) { item->type = cJSON_Number;item->valuedouble = num;item->valueint = (int)num; }return item; } +cJSON* cJSON_CreateString(const char* string) { cJSON* item = cJSON_New_Item();if (item) { item->type = cJSON_String;item->valuestring = cJSON_strdup(string); }return item; } +cJSON* cJSON_CreateArray(void) { cJSON* item = cJSON_New_Item();if (item)item->type = cJSON_Array;return item; } +cJSON* cJSON_CreateObject(void) { cJSON* item = cJSON_New_Item();if (item)item->type = cJSON_Object;return item; } + +/* Create Arrays: */ +cJSON* cJSON_CreateIntArray(const int* numbers, int count) { int i;cJSON* n = 0, * p = 0, * a = cJSON_CreateArray();for (i = 0;a && i < count;i++) { n = cJSON_CreateNumber(numbers[i]);if (!i)a->child = n;else suffix_object(p, n);p = n; }return a; } +cJSON* cJSON_CreateFloatArray(const float* numbers, int count) { int i;cJSON* n = 0, * p = 0, * a = cJSON_CreateArray();for (i = 0;a && i < count;i++) { n = cJSON_CreateNumber(numbers[i]);if (!i)a->child = n;else suffix_object(p, n);p = n; }return a; } +cJSON* cJSON_CreateDoubleArray(const double* numbers, int count) { int i;cJSON* n = 0, * p = 0, * a = cJSON_CreateArray();for (i = 0;a && i < count;i++) { n = cJSON_CreateNumber(numbers[i]);if (!i)a->child = n;else suffix_object(p, n);p = n; }return a; } +cJSON* cJSON_CreateStringArray(const char** strings, int count) { int i;cJSON* n = 0, * p = 0, * a = cJSON_CreateArray();for (i = 0;a && i < count;i++) { n = cJSON_CreateString(strings[i]);if (!i)a->child = n;else suffix_object(p, n);p = n; }return a; } + +/* Duplication */ +cJSON* cJSON_Duplicate(cJSON* item, int recurse) +{ + cJSON* newitem, * cptr, * nptr = 0, * newchild; + /* Bail on bad ptr */ + if (!item) return 0; + /* Create new item */ + newitem = cJSON_New_Item(); + if (!newitem) return 0; + /* Copy over all vars */ + newitem->type = item->type & (~cJSON_IsReference), newitem->valueint = item->valueint, newitem->valuedouble = item->valuedouble; + if (item->valuestring) { newitem->valuestring = cJSON_strdup(item->valuestring); if (!newitem->valuestring) { cJSON_Delete(newitem);return 0; } } + if (item->string) { newitem->string = cJSON_strdup(item->string); if (!newitem->string) { cJSON_Delete(newitem);return 0; } } + /* If non-recursive, then we're done! */ + if (!recurse) return newitem; + /* Walk the ->next chain for the child. */ + cptr = item->child; + while (cptr) + { + newchild = cJSON_Duplicate(cptr, 1); /* Duplicate (with recurse) each item in the ->next chain */ + if (!newchild) { cJSON_Delete(newitem);return 0; } + if (nptr) { nptr->next = newchild, newchild->prev = nptr;nptr = newchild; } /* If newitem->child already set, then crosswire ->prev and ->next and move on */ + else { newitem->child = newchild;nptr = newchild; } /* Set newitem->child and move to it */ + cptr = cptr->next; + } + return newitem; +} + +void cJSON_Minify(char* json) +{ + char* into = json; + while (*json) + { + if (*json == ' ') json++; + else if (*json == '\t') json++; /* Whitespace characters. */ + else if (*json == '\r') json++; + else if (*json == '\n') json++; + else if (*json == '/' && json[1] == '/') while (*json && *json != '\n') json++; /* double-slash comments, to end of line. */ + else if (*json == '/' && json[1] == '*') { while (*json && !(*json == '*' && json[1] == '/')) json++;json += 2; } /* multiline comments. */ + else if (*json == '\"') { *into++ = *json++;while (*json && *json != '\"') { if (*json == '\\') *into++ = *json++;*into++ = *json++; }*into++ = *json++; } /* string literals, which are \" sensitive. */ + else *into++ = *json++; /* All other characters. */ + } + *into = 0; /* and null-terminate. */ +} diff --git a/DFL_WL_BOM_TOERP/cJSON.h b/DFL_WL_BOM_TOERP/cJSON.h new file mode 100644 index 0000000..84f0fc8 --- /dev/null +++ b/DFL_WL_BOM_TOERP/cJSON.h @@ -0,0 +1,149 @@ +/* + Copyright (c) 2009 Dave Gamble + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef cJSON__h +#define cJSON__h + +#ifdef __cplusplus +extern "C" +{ +#endif + + /* cJSON Types: */ +#define cJSON_False 0 +#define cJSON_True 1 +#define cJSON_NULL 2 +#define cJSON_Number 3 +#define cJSON_String 4 +#define cJSON_Array 5 +#define cJSON_Object 6 + +#define cJSON_IsReference 256 +#define cJSON_StringIsConst 512 + +/* The cJSON structure: */ + typedef struct cJSON { + struct cJSON* next, * prev; /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */ + struct cJSON* child; /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */ + + int type; /* The type of the item, as above. */ + + char* valuestring; /* The item's string, if type==cJSON_String */ + int valueint; /* The item's number, if type==cJSON_Number */ + double valuedouble; /* The item's number, if type==cJSON_Number */ + + char* string; /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */ + } cJSON; + + typedef struct cJSON_Hooks { + void* (*malloc_fn)(size_t sz); + void (*free_fn)(void* ptr); + } cJSON_Hooks; + + /* Supply malloc, realloc and free functions to cJSON */ + extern void cJSON_InitHooks(cJSON_Hooks* hooks); + + + /* Supply a block of JSON, and this returns a cJSON object you can interrogate. Call cJSON_Delete when finished. */ + extern cJSON* cJSON_Parse(const char* value); + /* Render a cJSON entity to text for transfer/storage. Free the char* when finished. */ + extern char* cJSON_Print(cJSON* item); + /* Render a cJSON entity to text for transfer/storage without any formatting. Free the char* when finished. */ + extern char* cJSON_PrintUnformatted(cJSON* item); + /* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */ + extern char* cJSON_PrintBuffered(cJSON* item, int prebuffer, int fmt); + /* Delete a cJSON entity and all subentities. */ + extern void cJSON_Delete(cJSON* c); + + /* Returns the number of items in an array (or object). */ + extern int cJSON_GetArraySize(cJSON* array); + /* Retrieve item number "item" from array "array". Returns NULL if unsuccessful. */ + extern cJSON* cJSON_GetArrayItem(cJSON* array, int item); + /* Get item "string" from object. Case insensitive. */ + extern cJSON* cJSON_GetObjectItem(cJSON* object, const char* string); + + /* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */ + extern const char* cJSON_GetErrorPtr(void); + + /* These calls create a cJSON item of the appropriate type. */ + extern cJSON* cJSON_CreateNull(void); + extern cJSON* cJSON_CreateTrue(void); + extern cJSON* cJSON_CreateFalse(void); + extern cJSON* cJSON_CreateBool(int b); + extern cJSON* cJSON_CreateNumber(double num); + extern cJSON* cJSON_CreateString(const char* string); + extern cJSON* cJSON_CreateArray(void); + extern cJSON* cJSON_CreateObject(void); + + /* These utilities create an Array of count items. */ + extern cJSON* cJSON_CreateIntArray(const int* numbers, int count); + extern cJSON* cJSON_CreateFloatArray(const float* numbers, int count); + extern cJSON* cJSON_CreateDoubleArray(const double* numbers, int count); + extern cJSON* cJSON_CreateStringArray(const char** strings, int count); + + /* Append item to the specified array/object. */ + extern void cJSON_AddItemToArray(cJSON* array, cJSON* item); + extern void cJSON_AddItemToObject(cJSON* object, const char* string, cJSON* item); + extern void cJSON_AddItemToObjectCS(cJSON* object, const char* string, cJSON* item); /* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object */ + /* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */ + extern void cJSON_AddItemReferenceToArray(cJSON* array, cJSON* item); + extern void cJSON_AddItemReferenceToObject(cJSON* object, const char* string, cJSON* item); + + /* Remove/Detatch items from Arrays/Objects. */ + extern cJSON* cJSON_DetachItemFromArray(cJSON* array, int which); + extern void cJSON_DeleteItemFromArray(cJSON* array, int which); + extern cJSON* cJSON_DetachItemFromObject(cJSON* object, const char* string); + extern void cJSON_DeleteItemFromObject(cJSON* object, const char* string); + + /* Update array items. */ + extern void cJSON_InsertItemInArray(cJSON* array, int which, cJSON* newitem); /* Shifts pre-existing items to the right. */ + extern void cJSON_ReplaceItemInArray(cJSON* array, int which, cJSON* newitem); + extern void cJSON_ReplaceItemInObject(cJSON* object, const char* string, cJSON* newitem); + + /* Duplicate a cJSON item */ + extern cJSON* cJSON_Duplicate(cJSON* item, int recurse); + /* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will + need to be released. With recurse!=0, it will duplicate any children connected to the item. + The item->next and ->prev pointers are always zero on return from Duplicate. */ + + /* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */ + extern cJSON* cJSON_ParseWithOpts(const char* value, const char** return_parse_end, int require_null_terminated); + + extern void cJSON_Minify(char* json); + + /* Macros for creating things quickly. */ +#define cJSON_AddNullToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateNull()) +#define cJSON_AddTrueToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateTrue()) +#define cJSON_AddFalseToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateFalse()) +#define cJSON_AddBoolToObject(object,name,b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b)) +#define cJSON_AddNumberToObject(object,name,n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n)) +#define cJSON_AddStringToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s)) + +/* When assigning an integer value, it needs to be propagated to valuedouble too. */ +#define cJSON_SetIntValue(object,val) ((object)?(object)->valueint=(object)->valuedouble=(val):(val)) +#define cJSON_SetNumberValue(object,val) ((object)?(object)->valueint=(object)->valuedouble=(val):(val)) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/DFL_WL_BOM_TOERP/common_itk_util.c b/DFL_WL_BOM_TOERP/common_itk_util.c new file mode 100644 index 0000000..0d17a01 --- /dev/null +++ b/DFL_WL_BOM_TOERP/common_itk_util.c @@ -0,0 +1,288 @@ +/** +* @file common_itk_util.cpp +* @brief itk warpper utility function +* @author James +* @history +* =================================================================================== +* Date Name Description of Change +* 18-July-2008 James +*/ + +#pragma warning (disable: 4996) +#pragma warning (disable: 4819) + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +//#include +//#include +//#include + +#include +//#include +#include +#include +//#include +//#include +#include "common_itk_util.h" + +#ifdef WIN32 +#include +#include +#else +#include +#endif + + +#define ARGS_LENGTH 200 +#define ARGS_NAME_DEBUG "-debug" +#define DEBUG "-debug=" +#define MAX_PRINTLINE_LENGTH 2000 +#define MAX_PATH_LENGTH 2000 +#define MAX_ARGUMENT_LENGTH 400 +#define MAX_PARAMNAME_LENGTH 50 +#define MAX_FILE_EXT_LENGTH 10 +#define TRUE_FLAG 1 +#define FALSE_FLAG 0 +#define DETAILLOG 1 + + +void ECHO(char *format, ...) +{ + //if( !YFJC_OPT_DEBUG ) + // return; + + char msg[4000]; + va_list args; + + va_start( args, format ); + vsprintf( msg, format, args ); + va_end( args ); + + printf( msg ); + TC_write_syslog( msg ); +} + +FILE* logFile = NULL; + +void set_bypass(logical bypass) +{ + AM__set_application_bypass(bypass); +} +/*=============================================================================* + * FUNCTION: current_time + * PURPOSE : get the current datetime + * INPUT: + * date_t* date_tag // current date time tag + * + * RETURN: + * void + *============================================================================*/ +void current_time( date_t * date_tag ) +{ + time_t ltime; + struct tm *today ; + + // Set time zone from TZ environment variable. If TZ is not set, + // the operating system is queried to obtain the default value + // for the variable. + // + //_tzset(); + + // Get UNIX-style time and display as number and string. + time( <ime ); + + today = localtime( <ime ); + date_tag->year = today->tm_year + 1900 ; + date_tag->month = today->tm_mon ; + date_tag->day = today->tm_mday ; + date_tag->hour = today->tm_hour ; + date_tag->minute = today->tm_min ; + date_tag->second = today->tm_sec ; +} +/*=============================================================================* + * FUNCTION: CreateLogFile + * PURPOSE : create log file + * INPUT: + * char* FunctionName // the funtion which need to create log file + * FILE** logFile // out: the log file pointer + * + * RETURN: + * void + *============================================================================*/ +void CreateLogFile(char* FunctionName, char **fullname) +{ + int i=0, ifail = ITK_ok; + //date_t status_now; + //char* date_string = NULL; + char date_string[MAX_PATH_LENGTH]; + char logFileDir[MAX_PATH_LENGTH]; + char logFileName[MAX_PATH_LENGTH]; + + char* session_uid = NULL; + tag_t session_tag = NULLTAG; + time_t now; + struct tm *p; + + time(&now); + + logFile = NULL; + //current_time(&status_now); + p=localtime(&now); + + memset(date_string, 0, sizeof(date_string)); + sprintf(date_string,"%4d%02d%02d%02d%02d%02d",1900+p->tm_year,p->tm_mon+1 ,p->tm_mday ,p->tm_hour,p->tm_min ,p->tm_sec ); + //if( DATE_date_to_string( status_now, "%Y%m%d%H%M%S", &date_string) != ITK_ok ) + //ifail = ITK_date_to_string (status_now, &date_string ); + //if (ifail) + //{ + // printf("!*ERROR*!: Failed to get current date time\n"); + // goto CLEANUP; + //} + + memset(logFileDir, 0, sizeof(logFileDir)); + memset(logFileName, 0, sizeof(logFileName)); + //get log dir + sprintf(logFileDir, "%s", getenv("TEMP")); + printf("\n log file dir: %s\n", logFileDir); + //try to change dir to TC_USER_LOG_DIR + if(chdir(logFileDir)!=ITK_ok) + { + //not set TC_USER_LOG_DIR + //log in to default TC_LOG + memset(logFileDir, 0, sizeof(logFileDir)); + sprintf(logFileDir, "%s", getenv("TC_LOG")); + printf("\n TC_USER_LOG_DIR invalide, log file dir: %s\n", logFileDir); + if(chdir(logFileDir)!=ITK_ok) + { + //still can not change to log dir + printf("!*ERROR*!: Failed to change dir to TC_USER_LOG_DIR\n"); + goto CLEANUP; + } + } + + //get session_uid to make sure the log file name unique + POM_ask_session(&session_tag); + ITK__convert_tag_to_uid(session_tag, &session_uid); + + + //get logFileName + sprintf(logFileName, "%s_%s_%s.log", FunctionName, session_uid, date_string); + printf("log file name: %s\n", logFileName); + + *fullname = (char *)MEM_alloc(sizeof(char)*512); + sprintf(*fullname,"%s\\%s",logFileDir,logFileName); + + //for(i = 0; _access((char *)logFileName, 4) == 0; i++) + /*{ + memset(logFileName, 0, sizeof(logFileName)); + sprintf(logFileName, "%s_%s_%s_%d.log", FunctionName, session_uid, date_string, i); + } + printf("final log file name: %s\n", logFileName);*/ + + //create log file + logFile = fopen(logFileName, "w"); + +CLEANUP: + //DOFREE(date_string); + DOFREE(session_uid); +} + + +/*=============================================================================* + * FUNCTION: WriteLog + * PURPOSE : write log, if debug log File not null, write log message to log File + * INPUT: + * const char* format // debug message string + * + * RETURN: + * void + *============================================================================*/ +void WriteLog(const char* format, ...) +{ + va_list arg; + char tmp[MAX_PRINTLINE_LENGTH]; + + if(logFile) + { + //get the message + memset(tmp, 0, sizeof(tmp)); + va_start(arg, format); + vsprintf(tmp, format, arg); + va_end(arg); + + //----------print to command window for trace--------// + printf("%s\n", tmp); + + //print message to log file + fprintf(logFile, "%s\n", tmp); + fflush(logFile); + } + else + { + printf("*!Error!*: Log File Not Exist\n"); + } +} + +void CloseLog(void) +{ + if(logFile) + { + fclose(logFile); + logFile = NULL; + } +} + +//void getTypeinfo(char *type) +//{ +// int ulen = 0,i=0,tempcount=0,asd=0; +// +// char temp[128]=""; +// ulen = strlen(type); +// asd = ulen-1; +// for(i=0;i < ulen;i++) +// { +// if(type[i] == ';') +// { +// temp[tempcount] = '\0'; +// strcpy(excludetypes[typecount].type,temp); +// strcpy(temp,""); +// tempcount = 0; +// typecount = typecount + 1; +// } +// else +// { +// +// temp[tempcount] = type[i]; +// tempcount = tempcount + 1; +// if(i==asd) +// { +// temp[tempcount] = '\0'; +// strcpy(excludetypes[typecount].type,temp); +// typecount = typecount + 1; +// } +// +// } +// +// } +//} \ No newline at end of file diff --git a/DFL_WL_BOM_TOERP/common_itk_util.h b/DFL_WL_BOM_TOERP/common_itk_util.h new file mode 100644 index 0000000..f27d079 --- /dev/null +++ b/DFL_WL_BOM_TOERP/common_itk_util.h @@ -0,0 +1,40 @@ +/** +* @file common_itk_util.h +* @brief itk warpper utility function +* @author James +* @history +* =================================================================================== +* Date Name Description of Change +* 09-July-2008 James +*/ + +#ifndef COMMON_ITK_UTIL +#define COMMON_ITK_UTIL + +#ifdef __cplusplus +extern "C" { +#endif + +#define DOFREE(obj) \ +{ \ + if(obj) \ + { \ + MEM_free(obj); \ + obj = NULL; \ + } \ +} +void ECHO(char *format, ...); +void CreateLogFile(char* FunctionName, char **fullname); +void WriteLog(const char* format, ...); +void CloseLog(void); +void set_bypass(logical bypass); +//int FindDatasetReferenceExt( tag_t datasettype, const char *datasettype_ref, char ext[10] ); +//int CompareDate( date_t date1, date_t date2 ); +//int GetRandomTempFile( char tempFile[256] ); +//logical IsItemRevisionType( char object_type[WSO_name_size_c + 1] ); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/DFL_WL_BOM_TOERP/dfl_custom.h b/DFL_WL_BOM_TOERP/dfl_custom.h new file mode 100644 index 0000000..e618088 --- /dev/null +++ b/DFL_WL_BOM_TOERP/dfl_custom.h @@ -0,0 +1,76 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define EPM_HANDLER_COMMON +#include +using namespace std; + + +#define ERROR_QRY_NOT_FOUND (EMH_USER_error_base + 120) + + + +typedef struct { + string ID; +}DFL_ID; + + +struct FLOW +{ + string timeinfo; + string userid; + string type; + +}; + +struct WL_ITEM +{ + string item_id; + string item_name; + string item_spec; + string item_groupCode; + string item_unit; + string item_sourceCode; + string item_brand; + string item_rev; + string oldMateriel; + string item_uid; + tag_t item_tag; + string item_type; +}; +struct WL_ZJ +{ + string zi_id; + string last_mod_date; + string yonglian; + string work_id; + string chajian_id; + string beizhu_re; + string plmkey; +}; +struct WL_BOM +{ + string fu_id; + string fu_uid; + vector zjs; +}; +//释放资源 +#define DOFREE(obj) \ + { \ + if(obj) \ + { \ + MEM_free(obj); \ + obj = NULL; \ + } \ + } + + diff --git a/DFL_WL_BOM_TOERP/ocilib.cpp b/DFL_WL_BOM_TOERP/ocilib.cpp new file mode 100644 index 0000000..a9bbb21 --- /dev/null +++ b/DFL_WL_BOM_TOERP/ocilib.cpp @@ -0,0 +1,441 @@ +/*===================================================================================================================== + Copyright(c) 2012 ORIGIN. + Unpublished - All rights reserved +======================================================================================================================= +File description: + + Filename: ocilib.cxx + Module : OCI + + This file describes OCI library Package. + +======================================================================================================================= +Date Name Description of Change +1-Feb-2015 Ray li Initialize creation +$HISTORY$ +=====================================================================================================================*/ +#include "ocilib.h" +#include + +#define NUM 100 +#define USERNAME "infodba" +#define PASSWORD "infodba" +#define DBNAME "tc" + + +// 定义句柄结构 +typedef struct { + OCIEnv* p_env; //OCI environment handle 环境句柄 + OCIError* p_err; //OCI error handle 错误句柄 + OCISvcCtx* p_svc; //OCI service context handel 服务上下文句柄 + OCIServer* p_ser; //OCI server handle 服务器句柄 + OCISession* p_usr; //OCI user session handle 用户会话句柄 + OCIStmt* p_sql; //OCI statement handle 语句句柄 + OCIDefine* p_dfn; //OCI define handle 定义句柄 + OCIBind* p_bnd; //OCI bind handle 绑定句柄 +}OCIHandleInfo; + + +// 定义错误句柄结构 +typedef struct { + OCIEnv* p_env; + OCIError* p_err; + OCISvcCtx* p_svc; + OCIStmt* p_sql; + OCIDefine* p_dfn; + OCIBind* p_bnd; +}OCIDATA; + + +// 定义执行语句时候的输入参数 +typedef struct { + char value[NUM][NUM]; + char type[NUM][NUM]; +}SqlField; + + +// 定义查询语句时候的输入,输出参数 +typedef struct { + int naIntValue[NUM]; + int nIntNum; + char caCharValue[500][500]; + int nCharNum; +}SqlSelField; + +OCIHandleInfo* ociHandle = NULL; +OCIHandleInfo ociHand; + +int InitHandle(); +int _ExeSQL(char* SQL, char** inputValue, int inputValueCount); +int _QuerySQL(char* SQL, SqlSelField* pOutField, SqlSelField* pSelField); +int GetDataFromQuery(int* pRc, SqlSelField* pOutField); +void QuitFreeHandle(); + + + + +/**************************************************************************************************************************************** +函数名称: +函数功能: +入口参数: +出口参数: +备 注: +*****************************************************************************************************************************************/ + + +// 初始化Handler +int InitHandle() +{ + int swResult; + + ociHandle = &ociHand; + + + /*create OCI environment*/ + if (swResult = OCIEnvCreate(&ociHandle->p_env, OCI_DEFAULT, NULL, NULL, NULL, NULL, 0, NULL)) //环境句柄 + { + printf("environment create error!\n\n"); + return -1; + } + else + { + printf("environment create success!\n\n"); + //return 0; + } + + /*init handle*/ + if (swResult = OCIHandleAlloc(ociHandle->p_env, (dvoid**)&ociHandle->p_ser, OCI_HTYPE_SERVER, 0, NULL)) //服务器句柄 + { + printf("init server handle error!\n\n"); + return -1; + } + + + if (swResult = OCIHandleAlloc(ociHandle->p_env, (dvoid**)&ociHandle->p_err, OCI_HTYPE_ERROR, 0, NULL)) //错误句柄 + { + printf("init error handle error!\n\n"); + return -1; + } + + + if (swResult = OCIHandleAlloc(ociHandle->p_env, (dvoid**)&ociHandle->p_usr, OCI_HTYPE_SESSION, 0, NULL)) //事务句柄 + { + printf("init session handle error!\n\n"); + return -1; + } + + + if (swResult = OCIHandleAlloc(ociHandle->p_env, (dvoid**)&ociHandle->p_svc, OCI_HTYPE_SVCCTX, 0, NULL)) //上下文句柄 + { + printf("init service context handle error!\n\n"); + return -1; + } + + + if (swResult = OCIHandleAlloc(ociHandle->p_env, (dvoid**)&ociHandle->p_sql, OCI_HTYPE_STMT, 0, NULL)) //SQL语句句柄 + { + printf("init statement handle error!\n\n"); + return -1; + } + + printf("init handle success!\n\n"); + + return 0; +} + + + +// 连接数据库服务器 +int ConnServer(char* username, char* password, char* dbname) +{ + int swResult; + char errbuf[100] = { 0 }; + int errcode; + + if (InitHandle() == -1)//初始化句柄 + return -1; + + if (swResult = OCILogon(ociHandle->p_env, ociHandle->p_err, &ociHandle->p_svc, (text*)username, strlen(username), (text*)password, strlen(password), (text*)dbname, strlen(dbname))) + { + OCIErrorGet((dvoid*)ociHandle->p_err, (ub4)1, (text*)NULL, &errcode, (ub1*)errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR); + printf("Error - %.*s/n", 512, errbuf); + return -1; + } + else + printf("数据库连接成功!\n\n"); + return 0; +} + + + +// SQL语句的陈述(执行SQL语句) +int _ExeSQL(char* SQL, char** inputValue, int inputValueCount) +{ + int swResult, i; + int errcode; + + //设置绑定变量 + OCIBind* p_bndp[100]; + + //准备SQL语句 + if (swResult = OCIStmtPrepare(ociHandle->p_sql, ociHandle->p_err, (text*)SQL, strlen(SQL), OCI_NTV_SYNTAX, OCI_DEFAULT)) + { + printf("prepare SQL statements error!\n\n"); + } + else + { + printf("prepare SQL statements success!\n\n"); + } + + + // 绑定输入变量 + for (i = 0; i < inputValueCount; i++) + { + char errbuf[100] = { 0 }; + if (swResult = OCIBindByPos(ociHandle->p_sql, &p_bndp[i], ociHandle->p_err, i + 1, (dvoid*)inputValue[i], (sb4)strlen(inputValue[i]) + 1, SQLT_STR, (dvoid*)0, (ub2*)0, (ub2*)0, (ub4)0, (ub4*)0, OCI_DEFAULT)) + { + OCIErrorGet((dvoid*)ociHandle->p_err, (ub4)1, (text*)NULL, &errcode, (ub1*)errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR); + printf("Bind Error - %.*s/n", 512, errbuf); + return -1; + } + } + + //执行SQL statements + if (swResult = OCIStmtExecute(ociHandle->p_svc, ociHandle->p_sql, ociHandle->p_err, 1, 0, NULL, NULL, OCI_DEFAULT)) + { + char errbuf[100] = { 0 }; + OCIErrorGet((dvoid*)ociHandle->p_err, (ub4)1, (text*)NULL, &errcode, (ub1*)errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR); + printf("execute SQL statement Error - %.*s\n", 512, errbuf); + return -1; + } + else + { + printf("execute SQL statement success!\n\n"); + } + return 0; +} + + + + +// 查询SQL +int _QuerySQL(char* SQL, SqlSelField* pOutField, SqlSelField* pSelField) +{ + sword status; + int rc = 0, ret = 0; + char errbuf[100] = { 0 }; + int maxNum = 2048; + char chTag[8]; + int iIndex = 0; + int outputColumn = 0; + int errcode = 0; + char nullValue = '\0'; // + sb2 sb2aInd[30] = { '\0' }; + + // 准备SQL语句 + status = OCIStmtPrepare(ociHandle->p_sql, ociHandle->p_err, (text*)SQL, (ub4)strlen(SQL), (ub4)OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT); + + if (status != OCI_SUCCESS) + { + printf("SQL Preparing failed/n"); + return -1; + } + + + // 绑定int类型的, 定义SQL语句时 :1,:2, 定义输入变量 + for (iIndex = 0; iIndex < pSelField->nIntNum; iIndex++) + { + memset(chTag, 0, 8); + sprintf(chTag, ":%d", iIndex + 1); + if (rc = OCIBindByName(ociHandle->p_sql, (OCIBind**)&ociHandle->p_dfn, ociHandle->p_err, (text*)chTag, (sb4)strlen((char*)chTag), (dvoid*)&pSelField->naIntValue[iIndex], sizeof(int), SQLT_INT, (dvoid*)0, (ub2*)0, (ub2*)0, (ub4)0, (ub4*)0, OCI_DEFAULT)) + { + OCIErrorGet((dvoid*)ociHandle->p_err, (ub4)1, (text*)NULL, &errcode, (ub1*)errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR); + printf("BindByPos Error of ociHandle->p_sql - %.*s\n", 512, errbuf); + return -1; + } + } + + // 绑定char *类型的, 定义SQL语句时 :3,:4, 定义输入变量 + for (iIndex = 0; iIndex < pSelField->nCharNum; iIndex++) + { + int n = 0; + memset(chTag, 0, 8); + n = pSelField->nIntNum + iIndex + 1; + sprintf(chTag, ":%d", n); + if (rc = OCIBindByName(ociHandle->p_sql, (OCIBind**)&ociHandle->p_dfn, ociHandle->p_err, (text*)chTag, (sb4)strlen((char*)chTag), (dvoid*)&pSelField->caCharValue[iIndex], NUM, SQLT_STR, (dvoid*)0, (ub2*)0, (ub2*)0, (ub4)0, (ub4*)0, OCI_DEFAULT)) + { + OCIErrorGet((dvoid*)ociHandle->p_err, (ub4)1, (text*)NULL, &errcode, (ub1*)errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR); + printf("BindByPos Error of ociHandle->p_sql - %.*s\n", 512, errbuf); + return -1; + } + } + + + // 执行SQL语句 + if (rc = OCIStmtExecute(ociHandle->p_svc, ociHandle->p_sql, ociHandle->p_err, (ub4)0, (ub4)0, (CONST OCISnapshot*) NULL, (OCISnapshot*)NULL, OCI_STMT_SCROLLABLE_READONLY)) + { + OCIErrorGet((dvoid*)ociHandle->p_err, (ub4)1, (text*)NULL, &errcode, (ub1*)errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR); + printf("execute SQL Error - %.*s\n", 512, errbuf); + return -1; + } + else + { + printf("execute SQL success!\n\n"); + } + + + if (ret = OCIAttrGet(ociHandle->p_sql, (ub4)OCI_HTYPE_STMT, (dvoid*)&outputColumn, (ub4*)0, (ub4)OCI_ATTR_PARAM_COUNT, ociHandle->p_err)) + { + OCIErrorGet((dvoid*)ociHandle->p_err, (ub4)1, (text*)NULL, &errcode, (ub1*)errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR); + printf("Get OCIAttr Error of ociHandle->p_sql - %.*s\n", 512, errbuf); + return -1; + } + + + // 绑定int类型的, 定义SQL语句时 :1,:2, 定义输出变量 + for (iIndex = 0; iIndex < pOutField->nIntNum; iIndex++) + { + if (rc = OCIDefineByPos(ociHandle->p_sql, &ociHandle->p_dfn, ociHandle->p_err, iIndex + 1, (dvoid*)&pOutField->naIntValue[iIndex], sizeof(int), SQLT_INT, (dvoid*)0, (ub2*)0, (ub2*)0, OCI_DEFAULT)) + { + OCIErrorGet((dvoid*)ociHandle->p_err, (ub4)1, (text*)NULL, &errcode, (ub1*)errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR); + printf("DefineByPos Error of ociHandle->p_sql - %.*s\n", 512, errbuf); + return -1; + } + } + + + // 绑定char *类型的, 定义SQL语句时 :1,:2, 定义输出变量 + for (iIndex = 0; iIndex < outputColumn; iIndex++) + { + int n = iIndex + 1; + if (rc = OCIDefineByPos(ociHandle->p_sql, &ociHandle->p_dfn, ociHandle->p_err, n, (dvoid*)&pOutField->caCharValue[iIndex], 1000 * sizeof(char), SQLT_STR, (dvoid*)0, (ub2*)0, (ub2*)0, OCI_DEFAULT)) + { + OCIErrorGet((dvoid*)ociHandle->p_err, (ub4)1, (text*)NULL, &errcode, (ub1*)errbuf, (ub4)sizeof(errbuf), OCI_HTYPE_ERROR); + printf("DefineByPos Error of ociHandle->p_sql - %.*s\n", 512, errbuf); + return -1; + } + } + + return 0; + +} + + + +// 释放Handler +void QuitFreeHandle() +{ + // 退出服务器 + OCILogoff(ociHandle->p_svc, ociHandle->p_err); + printf("Quit success!\n"); + + // 释放句柄 + OCIHandleFree(ociHandle->p_ser, OCI_HTYPE_SERVER); //释放服务器句柄 + OCIHandleFree(ociHandle->p_err, OCI_HTYPE_ERROR); //释放错误句柄 + OCIHandleFree(ociHandle->p_usr, OCI_HTYPE_SESSION); //释放事务句柄 + OCIHandleFree(ociHandle->p_svc, OCI_HTYPE_SVCCTX); //释放上下文句柄 + OCIHandleFree(ociHandle->p_sql, OCI_HTYPE_STMT); //释放SQL语句句柄 +} + + +// 执行类操作 +int ExecuteSQL(char* SQL, int valueCount, char** value) +{ + int i = 0; + + if (i = _ExeSQL(SQL, value, valueCount)) + { + printf("继续操作1\n"); + QuitFreeHandle(); + return -1; + } + printf("继续操作2\n"); + return 0; +} + + +// 有输入参数的查询 +int QuerySQL(char* SQL, int inputValueCount, char** inputValue, int* outputColumn, int* outputValueCount, char**** outputValue) +{ + int i = 0, j = 0, ret = 0; + + int times = 0, temp = 0; + + SqlSelField infield; + SqlSelField outField; + + // 初始化参数结构 + infield.nCharNum = inputValueCount; + infield.nIntNum = 0; + outField.nCharNum = 0; + outField.nIntNum = 0; + + *outputColumn = 0; + *outputValueCount = 0; + + for (i = 0; i < inputValueCount; i++) + { + strcpy(infield.caCharValue[i], inputValue[i]); + } + + // 执行查询语句 + + + if (ret = _QuerySQL(SQL, &outField, &infield)) + { + printf("SQL查询失败!\n"); + QuitFreeHandle(); + return -1; + } + + // 获取结果列数 + ret = OCIAttrGet(ociHandle->p_sql, (ub4)OCI_HTYPE_STMT, (dvoid*)outputColumn, (ub4*)0, (ub4)OCI_ATTR_PARAM_COUNT, ociHandle->p_err); + + // 提取最后一行,便于去行数 + ret = OCIStmtFetch2(ociHandle->p_sql, ociHandle->p_err, 1, OCI_FETCH_LAST, 0, OCI_DEFAULT); + // 获取结果行数 + ret = OCIAttrGet(ociHandle->p_sql, (ub4)OCI_HTYPE_STMT, (dvoid*)outputValueCount, (ub4*)0, (ub4)OCI_ATTR_ROW_COUNT, ociHandle->p_err); + + if (*outputValueCount == 0) + return 0; + + + // 开始分配内存并且存储 + ret = OCIStmtFetch2(ociHandle->p_sql, ociHandle->p_err, 1, OCI_FETCH_FIRST, 0, OCI_DEFAULT); + *outputValue = (char***)calloc((*outputValueCount) + 1, sizeof(char**)); + do + { + (*outputValue)[i] = (char**)calloc((*outputColumn) + 1, sizeof(char*)); + for (j = 0; j < (*outputColumn); j++) + { + (*outputValue)[i][j] = (char*)calloc(1000, sizeof(char)); + strcpy((*outputValue)[i][j], outField.caCharValue[j]); + //printf("outValue[%d][%d] = %s , 地址=%d, 所指向地址= %d\n ",i,j,(*outputValue)[i][j],&(*outputValue)[i][j],(*outputValue)[i][j]); + } + i++; + } while ((ret = OCIStmtFetch2(ociHandle->p_sql, ociHandle->p_err, 1, OCI_FETCH_NEXT, 1, OCI_DEFAULT) != OCI_NO_DATA)); + + return 0; +} + + +// 无输入参数的查询 +int QuerySQLNoInputParam(char* SQL, int* outputColumn, int* outputValueCount, char**** outputValue) +{ + return QuerySQL(SQL, 0, NULL, outputColumn, outputValueCount, outputValue); +} + +// 无参数操作 +int ExecuteSQLNoInputParam(char* SQL) +{ + printf("开始操作\n"); + return ExecuteSQL(SQL, 0, NULL); +} + +// 断开连接 +void DisConnServer() +{ + if (ociHandle != NULL) + QuitFreeHandle(); +} + diff --git a/DFL_WL_BOM_TOERP/ocilib.h b/DFL_WL_BOM_TOERP/ocilib.h new file mode 100644 index 0000000..cb7ac1e --- /dev/null +++ b/DFL_WL_BOM_TOERP/ocilib.h @@ -0,0 +1,99 @@ +/*===================================================================================================================== + Copyright(c) 2012 ORIGIN. + Unpublished - All rights reserved +======================================================================================================================= +File description: + + Filename: ocilib.h + Module : OCI + + This Header file of OCI library Package. + +======================================================================================================================= +Date Name Description of Change +1-Feb-2015 Ray Initialize creation +$HISTORY$ +=====================================================================================================================*/ +#include +#include +#include +#include +#include +//#include + +#define OCI_FAIL 1 +#define OCI_OK 0 + +#ifdef __cplusplus +extern "C" +{ +#endif + /** + * 连接数据库. + * @param username - 用户名 + * @param password - 密码 + * @param dbname - 数据库SID + * @return - OCI_OK or error code + * + * ORACLE 数据库的连接与封装函数 + */ + extern int ConnServer(char* username, char* password, char* dbname); + + + /** + * 不带输入参数的执行SQL语句. + * @param SQL - SQL语句 + * @return - OCI_OK or error code + * + * ORACLE 数据库的连接与封装函数 + */ + extern int ExecuteSQLNoInputParam(char* SQL); + + /** + * 带输入参数的执行SQL语句. + * @param SQL - SQL语句 + * @param inputValueCount - 输入参数数量 + * @param inputValue - 输入参数值 + * @return - OCI_OK or error code + * + * ORACLE 数据库的连接与封装函数 + */ + extern int ExecuteSQL(char* SQL, int inputValueCount, char** inputValue); + + /** + * 不带输入参数的查询SQL语句. + * @param SQL - SQL语句 + * @param outputColumn - 输出表的列的数量 + * @param outputValueCount - 输出表的行的数量 + * @param outputValue - 输出表内容 + * @return - OCI_OK or error code + * + * ORACLE 数据库的连接与封装函数 + */ + extern int QuerySQLNoInputParam(char* SQL, int* outputColumn, int* outputValueCount, char**** outputValue); + + /** + * 带输入参数的查询SQL语句. + * @param SQL - SQL语句 + * @param inputValueCount - 输入参数数量 + * @param inputValue - 输入参数值 + * @param outputColumn - 输出表的列的数量 + * @param outputValueCount - 输出表的行的数量 + * @param outputValue - 输出表内容 + * @return - OCI_OK or error code + * + * ORACLE 数据库的连接与封装函数 + */ + extern int QuerySQL(char* SQL, int inputValueCount, char** inputValue, int* outputColumn, int* outputValueCount, char**** outputValue); + + /** + * 断开数据库连接. + * + * ORACLE 数据库的连接与封装函数 + */ + extern void DisConnServer(); + +#ifdef __cplusplus +} +#endif + diff --git a/DFL_WL_BOM_TOERP/x64/Debug/DFL_WL_BOM_TOERP.Build.CppClean.log b/DFL_WL_BOM_TOERP/x64/Debug/DFL_WL_BOM_TOERP.Build.CppClean.log new file mode 100644 index 0000000..f9f423e --- /dev/null +++ b/DFL_WL_BOM_TOERP/x64/Debug/DFL_WL_BOM_TOERP.Build.CppClean.log @@ -0,0 +1,3 @@ +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\x64\debug\vc141.idb +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\x64\debug\vc141.pdb +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\x64\debug\dfl_wl_bom_toerp.tlog\cl.command.1.tlog diff --git a/DFL_WL_BOM_TOERP/x64/Debug/DFL_WL_BOM_TOERP.log b/DFL_WL_BOM_TOERP/x64/Debug/DFL_WL_BOM_TOERP.log new file mode 100644 index 0000000..2191fe7 --- /dev/null +++ b/DFL_WL_BOM_TOERP/x64/Debug/DFL_WL_BOM_TOERP.log @@ -0,0 +1,264 @@ + DFL_WL_BOM_TOERP.cpp +c:\users\administrator\desktop\dfl\include\pom\pom\pom.h(805): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 +c:\users\administrator\desktop\dfl\include\pom\pom\pom.h(5416): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(63): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(65): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(87): warning C4267: “初始化”: 从“size_t”转换到“unsigned long”,可能丢失数据 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(88): warning C4018: “<”: 有符号/无符号不匹配 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(150): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(278): warning C4477: “printf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“std::string” +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(188): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(193): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(217): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(219): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(237): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(239): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(284): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(285): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(288): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(395): warning C4477: “printf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“std::string” +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(398): warning C4477: “printf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“std::string” +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(404): warning C4477: “printf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“std::string” +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(417): warning C4477: “printf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“std::string” +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(418): warning C4477: “printf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“std::string” +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(444): warning C4477: “printf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“std::string” +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(519): warning C4477: “printf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“std::string” +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(520): warning C4477: “printf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“std::string” +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(521): warning C4477: “printf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“std::string” +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(522): warning C4477: “printf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“std::string” +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(367): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(372): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(422): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(424): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(463): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(465): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(528): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(529): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(535): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(536): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(542): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(543): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(546): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(568): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(569): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(570): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(571): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(572): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(573): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(574): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(610): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(715): error C2664: “int ExecuteSQLNoInputParam(char *)”: 无法将参数 1 从“const char [7]”转换为“char *” + d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(715): note: 从字符串文本转换将丢失 const 限定符(请参阅 /Zc:strictStrings) +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(655): error C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\time.h(506): note: 参见“localtime”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(659): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(662): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(666): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(669): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(673): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(676): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(680): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(683): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(687): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(690): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(692): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(704): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(707): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(942): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(990): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1038): error C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\time.h(506): note: 参见“localtime”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1040): error C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdlib.h(1191): note: 参见“getenv”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1047): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1052): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1053): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1054): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1055): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1056): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1057): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1111): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1114): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1116): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1118): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1120): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1121): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1124): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1125): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1126): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1127): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1128): error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(208): note: 参见“fopen”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1133): error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(133): note: 参见“strcpy”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1134): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1135): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1136): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1137): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1138): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1139): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1140): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1141): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1142): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1143): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1144): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1145): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1146): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1147): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1148): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1149): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1150): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1151): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1159): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1166): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1170): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1176): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1177): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1178): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1179): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1182): error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(208): note: 参见“fopen”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1188): error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(133): note: 参见“strcpy”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1189): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1190): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1191): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1192): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1193): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1194): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1195): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1196): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1197): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1198): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1199): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1200): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1201): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1202): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1203): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1204): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1205): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1206): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(90): note: 参见“strcat”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1295): warning C4474: printf: 格式字符串中传递的参数太多 + d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1295): note: 占位符和其参数预计 0 可变参数,但提供的却是 1 参数 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp.cpp(1269): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 + ocilib.cpp +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\ocilib.cpp(158): warning C4267: “参数”: 从“size_t”转换到“ub4”,可能丢失数据 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\ocilib.cpp(181): warning C4267: “参数”: 从“size_t”转换到“ub4”,可能丢失数据 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\ocilib.cpp(249): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\ocilib.cpp(264): error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\stdio.h(1774): note: 参见“sprintf”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\ocilib.cpp(378): error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(133): note: 参见“strcpy”的声明 +d:\工作项目\东富龙\dfl_wl_bom_toerp\dfl_wl_bom_toerp\dfl_wl_bom_toerp\ocilib.cpp(412): error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. + c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(133): note: 参见“strcpy”的声明 + 正在生成代码... diff --git a/DFL_WL_BOM_TOERP/x64/Debug/DFL_WL_BOM_TOERP.tlog/CL.command.1.tlog b/DFL_WL_BOM_TOERP/x64/Debug/DFL_WL_BOM_TOERP.tlog/CL.command.1.tlog new file mode 100644 index 0000000..46b134b --- /dev/null +++ b/DFL_WL_BOM_TOERP/x64/Debug/DFL_WL_BOM_TOERP.tlog/CL.command.1.tlog @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/DFL_WL_BOM_TOERP/x64/Debug/DFL_WL_BOM_TOERP.tlog/DFL_WL_BOM_TOERP.lastbuildstate b/DFL_WL_BOM_TOERP/x64/Debug/DFL_WL_BOM_TOERP.tlog/DFL_WL_BOM_TOERP.lastbuildstate new file mode 100644 index 0000000..4fbf618 --- /dev/null +++ b/DFL_WL_BOM_TOERP/x64/Debug/DFL_WL_BOM_TOERP.tlog/DFL_WL_BOM_TOERP.lastbuildstate @@ -0,0 +1,2 @@ +#TargetFrameworkVersion=v4.0:PlatformToolSet=v141:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0.17134.0 +Debug|x64|D:\工作项目\东富龙\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOERP\| diff --git a/DFL_WL_BOM_TOERP/x64/Debug/DFL_WL_BOM_TOERP.tlog/unsuccessfulbuild b/DFL_WL_BOM_TOERP/x64/Debug/DFL_WL_BOM_TOERP.tlog/unsuccessfulbuild new file mode 100644 index 0000000..e69de29 diff --git a/DFL_WL_BOM_TOERP/x64/Debug/vc141.idb b/DFL_WL_BOM_TOERP/x64/Debug/vc141.idb new file mode 100644 index 0000000..eeca2d9 Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Debug/vc141.idb differ diff --git a/DFL_WL_BOM_TOERP/x64/Debug/vc141.pdb b/DFL_WL_BOM_TOERP/x64/Debug/vc141.pdb new file mode 100644 index 0000000..e9c2b2f Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Debug/vc141.pdb differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.Build.CppClean.log b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.Build.CppClean.log new file mode 100644 index 0000000..97a7bc9 --- /dev/null +++ b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.Build.CppClean.log @@ -0,0 +1,13 @@ +d:\项目\东富龙\2-plm相关代码\2-plm相关代码\dfl_wl_bom_toerp - 副本\dfl_wl_bom_toerp\x64\release\vc140.pdb +d:\项目\东富龙\2-plm相关代码\2-plm相关代码\dfl_wl_bom_toerp - 副本\dfl_wl_bom_toerp\x64\release\ocilib.obj +d:\项目\东富龙\2-plm相关代码\2-plm相关代码\dfl_wl_bom_toerp - 副本\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_toerp.obj +d:\项目\东富龙\2-plm相关代码\2-plm相关代码\dfl_wl_bom_toerp - 副本\x64\release\dfl_wl_bom_toerp.exe +d:\项目\东富龙\2-plm相关代码\2-plm相关代码\dfl_wl_bom_toerp - 副本\x64\release\dfl_wl_bom_toerp.ipdb +d:\项目\东富龙\2-plm相关代码\2-plm相关代码\dfl_wl_bom_toerp - 副本\x64\release\dfl_wl_bom_toerp.iobj +d:\项目\东富龙\2-plm相关代码\2-plm相关代码\dfl_wl_bom_toerp - 副本\x64\release\dfl_wl_bom_toerp.pdb +d:\项目\东富龙\2-plm相关代码\2-plm相关代码\dfl_wl_bom_toerp - 副本\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_toerp.tlog\cl.command.1.tlog +d:\项目\东富龙\2-plm相关代码\2-plm相关代码\dfl_wl_bom_toerp - 副本\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_toerp.tlog\cl.read.1.tlog +d:\项目\东富龙\2-plm相关代码\2-plm相关代码\dfl_wl_bom_toerp - 副本\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_toerp.tlog\cl.write.1.tlog +d:\项目\东富龙\2-plm相关代码\2-plm相关代码\dfl_wl_bom_toerp - 副本\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_toerp.tlog\link.command.1.tlog +d:\项目\东富龙\2-plm相关代码\2-plm相关代码\dfl_wl_bom_toerp - 副本\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_toerp.tlog\link.read.1.tlog +d:\项目\东富龙\2-plm相关代码\2-plm相关代码\dfl_wl_bom_toerp - 副本\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_toerp.tlog\link.write.1.tlog diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.lastbuildstate b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.lastbuildstate new file mode 100644 index 0000000..70794f1 --- /dev/null +++ b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.lastbuildstate @@ -0,0 +1,2 @@ +#v4.0:v110:false +Release|x64|D:\工作项目\东富龙\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOERP\| diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.log b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.log new file mode 100644 index 0000000..5c89d41 --- /dev/null +++ b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.log @@ -0,0 +1,39 @@ +C:\VS2019\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(513,5): warning MSB8028: 中间目录(x64\Release\)包含从另一个项目(DFL_WL_BOM_TOERP.vcxproj)共享的文件。 这会导致错误的清除和重新生成行为。 + cJSON.c +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\cJSON.c(145,32): warning C4267: “return”: 从“size_t”转换到“int”,可能丢失数据 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\cJSON.c(261,18): warning C4244: “=”: 从“__int64”转换到“int”,可能丢失数据 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\cJSON.c(483,51): warning C4267: “+=”: 从“size_t”转换到“int”,可能丢失数据 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\cJSON.c(626,80): warning C4267: “+=”: 从“size_t”转换到“int”,可能丢失数据 + common_itk_util.c +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\common_itk_util.c(90,28): warning C4013: “AM__set_application_bypass”未定义;假设外部返回 int + DFL_WL_BOM_TOSRM.cpp +D:\Clibs\12\include\pom\pom\pom.h(806,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 +D:\Clibs\12\include\pom\pom\pom.h(5417,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 +D:\Clibs\12\include_cpp\base_utils\IFail.hxx(114,17): warning C4251: “IFail::m_message”: class“std::basic_string,std::allocator>”需要有 dll 接口由 class“IFail”的客户端使用 +C:\VS2019\VC\Tools\MSVC\14.29.30133\include\xstring(4871): message : 参见“std::basic_string,std::allocator>”的声明 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(328,8): warning C4476: "printf": 格式说明符中的类型字段字符“Y”未知 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(328,8): warning C4476: "printf": 格式说明符中的类型字段字符“m”未知 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(328,8): warning C4473: “printf”: 没有为格式字符串传递足够的参数 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(328,8): message : 占位符和其参数预计 2 可变参数,但提供的却是 0 参数 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(328,8): message : 缺失的可变参数 1 为格式字符串“%d”所需 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(330,8): warning C4476: "printf": 格式说明符中的类型字段字符“Y”未知 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(330,8): warning C4476: "printf": 格式说明符中的类型字段字符“m”未知 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(330,8): warning C4473: “printf”: 没有为格式字符串传递足够的参数 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(330,8): message : 占位符和其参数预计 2 可变参数,但提供的却是 0 参数 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(330,8): message : 缺失的可变参数 1 为格式字符串“%d”所需 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(135,8): warning C4101: “executor”: 未引用的局部变量 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(185,9): warning C4101: “group_name1”: 未引用的局部变量 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(137,8): warning C4101: “user_uid”: 未引用的局部变量 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(186,10): warning C4101: “creDate”: 未引用的局部变量 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(209,11): warning C4101: “fileurl”: 未引用的局部变量 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(216,11): warning C4101: “urlcreatetime”: 未引用的局部变量 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOSRM.cpp(492,6): warning C4101: “len”: 未引用的局部变量 + ocilib.cpp +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\ocilib.cpp(158,5): warning C4267: “参数”: 从“size_t”转换到“ub4”,可能丢失数据 +D:\source\东富龙\DFL_WL_BOM_TOSRM\DFL_WL_BOM_TOERP\ocilib.cpp(181,5): warning C4267: “参数”: 从“size_t”转换到“ub4”,可能丢失数据 + 正在生成代码 + Previous IPDB not found, fall back to full compilation. + All 210 functions were compiled because no usable IPDB/IOBJ from previous compilation was found. + 已完成代码的生成 +itk_main.obj : warning LNK4099: 未找到 PDB“”(使用“itk_main.obj”或在“”中寻找);正在链接对象,如同没有调试信息一样 + DFL_WL_BOM_TOERP.vcxproj -> D:\source\东富龙\DFL_WL_BOM_TOSRM\x64\Release\DFL_WL_BOM_TOSRM.exe diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/CL.command.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/CL.command.1.tlog new file mode 100644 index 0000000..f7d226b Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/CL.command.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/CL.read.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/CL.read.1.tlog new file mode 100644 index 0000000..01871da Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/CL.read.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/CL.write.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/CL.write.1.tlog new file mode 100644 index 0000000..9c8f4a6 Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/CL.write.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/DFL_WL_BOM_TOERP.lastbuildstate b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/DFL_WL_BOM_TOERP.lastbuildstate new file mode 100644 index 0000000..bcebed1 --- /dev/null +++ b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/DFL_WL_BOM_TOERP.lastbuildstate @@ -0,0 +1,2 @@ +#TargetFrameworkVersion=v4.0:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0.19041.0 +Release|x64|D:\项目\东富龙\2-PLM相关代码\2-PLM相关代码\DFL_WL_BOM_TOERP - 副本\| diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/link.command.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/link.command.1.tlog new file mode 100644 index 0000000..f0d2dbd Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/link.command.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/link.read.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/link.read.1.tlog new file mode 100644 index 0000000..a209827 Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/link.read.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/link.write.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/link.write.1.tlog new file mode 100644 index 0000000..c464b38 Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.tlog/link.write.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.unsuccessfulbuild b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.unsuccessfulbuild new file mode 100644 index 0000000..e69de29 diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.vcxproj.FileListAbsolute.txt b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOERP.vcxproj.FileListAbsolute.txt new file mode 100644 index 0000000..e69de29 diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.Build.CppClean.log b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.Build.CppClean.log new file mode 100644 index 0000000..a951f2b --- /dev/null +++ b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.Build.CppClean.log @@ -0,0 +1,15 @@ +d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\vc142.pdb +d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\common_itk_util.obj +d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\cjson.obj +d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\ocilib.obj +d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.obj +d:\source\东富龙\dfl_wl_bom_tosrm\x64\release\dfl_wl_bom_tosrm.exe +d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.ipdb +d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.iobj +d:\source\东富龙\dfl_wl_bom_tosrm\x64\release\dfl_wl_bom_tosrm.pdb +d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\cl.command.1.tlog +d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\cl.read.1.tlog +d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\cl.write.1.tlog +d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\link.command.1.tlog +d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\link.read.1.tlog +d:\source\东富龙\dfl_wl_bom_tosrm\dfl_wl_bom_toerp\x64\release\dfl_wl_bom_tosrm.tlog\link.write.1.tlog diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.exe.recipe b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.exe.recipe new file mode 100644 index 0000000..93daf1e --- /dev/null +++ b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.exe.recipe @@ -0,0 +1,11 @@ + + + + + D:\source\东富龙\DFL_WL_BOM_TOSRM\x64\Release\DFL_WL_BOM_TOSRM.exe + + + + + + \ No newline at end of file diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.iobj b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.iobj new file mode 100644 index 0000000..f4359cf Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.iobj differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.ipdb b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.ipdb new file mode 100644 index 0000000..e40a4a8 Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.ipdb differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.obj b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.obj new file mode 100644 index 0000000..edb0799 Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.obj differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.command.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.command.1.tlog new file mode 100644 index 0000000..4c2ae3e Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.command.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.read.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.read.1.tlog new file mode 100644 index 0000000..709fc8f Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.read.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.write.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.write.1.tlog new file mode 100644 index 0000000..9f3636b Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/CL.write.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/DFL_WL_BOM_TOSRM.lastbuildstate b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/DFL_WL_BOM_TOSRM.lastbuildstate new file mode 100644 index 0000000..90015c7 --- /dev/null +++ b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/DFL_WL_BOM_TOSRM.lastbuildstate @@ -0,0 +1,2 @@ +PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.29.30133:VCServicingVersionMFC=14.29.30136:TargetPlatformVersion=10.0.19041.0: +Release|x64|D:\source\东富龙\DFL_WL_BOM_TOSRM\| diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.command.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.command.1.tlog new file mode 100644 index 0000000..40e6814 Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.command.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.read.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.read.1.tlog new file mode 100644 index 0000000..a2c285c Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.read.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.write.1.tlog b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.write.1.tlog new file mode 100644 index 0000000..67379f4 Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/DFL_WL_BOM_TOSRM.tlog/link.write.1.tlog differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/cJSON.obj b/DFL_WL_BOM_TOERP/x64/Release/cJSON.obj new file mode 100644 index 0000000..71501e4 Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/cJSON.obj differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/common_itk_util.obj b/DFL_WL_BOM_TOERP/x64/Release/common_itk_util.obj new file mode 100644 index 0000000..de76ded Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/common_itk_util.obj differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/ocilib.obj b/DFL_WL_BOM_TOERP/x64/Release/ocilib.obj new file mode 100644 index 0000000..4b2ee26 Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/ocilib.obj differ diff --git a/DFL_WL_BOM_TOERP/x64/Release/vc142.pdb b/DFL_WL_BOM_TOERP/x64/Release/vc142.pdb new file mode 100644 index 0000000..866b263 Binary files /dev/null and b/DFL_WL_BOM_TOERP/x64/Release/vc142.pdb differ