20231222 commit

main
李建辉 2 years ago
commit 889333277a

@ -0,0 +1,174 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{80658E28-1D8D-406B-B96C-6F8B3009168B}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>DFLWLBOMTOERP</RootNamespace>
<WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
<ProjectName>DFL_WL_BOM_TOSRM</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;IPLIB=none;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>C:\Users\Administrator\Desktop\dfl\oracle\include;C:\Users\Administrator\Desktop\dfl\include;C:\Users\Administrator\Desktop\dfl\include_cpp;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;IPLIB=none;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>false</ConformanceMode>
<AdditionalIncludeDirectories>D:\Clibs\12\include;D:\Clibs\12\include_cpp;D:\Clibs\12\OCI\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>/D _CRT_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>D:\项目\东富龙\东富龙\lib\*.lib;D:\Clibs\12\lib\*.lib;D:\Clibs\12\lib\itk_main.obj;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>libuser_exits.ar.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="cJSON.c" />
<ClCompile Include="common_itk_util.c" />
<ClCompile Include="DFL_WL_BOM_TOSRM.cpp" />
<ClCompile Include="ocilib.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="cJSON.h" />
<ClInclude Include="common_itk_util.h" />
<ClInclude Include="dfl_custom.h" />
<ClInclude Include="ocilib.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="源文件">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="头文件">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="资源文件">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="DFL_WL_BOM_TOSRM.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="ocilib.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="cJSON.c">
<Filter>头文件</Filter>
</ClCompile>
<ClCompile Include="common_itk_util.c">
<Filter>头文件</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="dfl_custom.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="ocilib.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="cJSON.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="common_itk_util.h">
<Filter>头文件</Filter>
</ClInclude>
</ItemGroup>
</Project>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>

@ -0,0 +1,571 @@
#include <iostream>
#include <vector>
#include "dfl_custom.h"
#include "ocilib.h"
#include <unidefs.h>
#include <tc/preferences.h>
#include <ics/ics.h>
#include <ics/ics2.h>
#include <tc/tc_macros.h>
#include <tccore/aom_prop.h>
#include <tccore/aom.h>
#include <time.h>
#include <base_utils/TcResultStatus.hxx>
#include <base_utils/IFail.hxx>
#include "corecrt_io.h"
#include "direct.h"
#include <ae/ae.h>
#include <wininet.h>
#pragma comment(lib, "Wininet")
#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING
#include <experimental\filesystem>
#pragma comment(lib, "ws2_32.lib")
#include <iostream>
using namespace std;
#include <ctime>
#include <fclasses/tc_date.h>
#include "cJSON.h"
#include <curl\curl.h>
#include <sstream>
#include <iostream>
#include "common_itk_util.h"
//#include "dfl_custom.h"
//#include "util.h"
//#include <ics/ics2.h>
//#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<string>& 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<WL_ITEM> 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封存状态给1T2_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;
}

@ -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 <string.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <float.h>
#include <limits.h>
#include <ctype.h>
#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. */
}

@ -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

@ -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 <epm/epm.h>
#include <epm/epm_toolkit_tc_utils.h>
#include <ict/ict_userservice.h>
#include <tccore/item.h>
#include <ae/ae.h>
#include <tc/folder.h>
#include <tccore/aom.h>
#include <sa/sa.h>
#include <tccore/aom_prop.h>
#include <property/prop_errors.h>
#include <tccore/workspaceobject.h>
#include <tc/preferences.h>
#include <tccore/imantype.h>
#include <tccore//grm.h>
#include <tccore/grmtype.h>
#include <sa/am.h>
#include <cfm/cfm.h>
#include <bom/bom.h>
#include <tccore/uom.h>
#include <ps/ps.h>
#include <epm/signoff.h>
#include <fclasses/tc_date.h>
//#include <tccore/imantype.h>
//#include <textsrv/textserver.h>
//#include <user_exits/epm_toolkit_utils.h>
//#include <ss/ss_errors.h>
#include <stdlib.h>
//#include <io.h>
#include <stdio.h>
#include <time.h>
//#include <direct.h>
//#include <unistd.h>
#include "common_itk_util.h"
#ifdef WIN32
#include <io.h>
#include <direct.h>
#else
#include <unistd.h>
#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( &ltime );
today = localtime( &ltime );
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;
// }
//
// }
//
// }
//}

@ -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

@ -0,0 +1,76 @@
#include <vector>
#include <map>
#include <string>
#include <ict/ict_userservice.h>
#include <tccore/item_errors.h>
#include <tc/preferences.h>
#include <bom/bom_msg.h>
#include <tccore/tc_msg.h>
#include <bom/bom.h>
#include <ics/ics.h>
#include <time.h>
#define EPM_HANDLER_COMMON
#include <epm/epm.h>
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<WL_ZJ> zjs;
};
//释放资源
#define DOFREE(obj) \
{ \
if(obj) \
{ \
MEM_free(obj); \
obj = NULL; \
} \
}

@ -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 <stdlib.h>
#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();
}

@ -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 <oci.h>
#include <stdio.h>
#include <memory.h>
#include <string.h>
#include <malloc.h>
//#include <limits.h>
#define OCI_FAIL 1
#define OCI_OK 0
#ifdef __cplusplus
extern "C"
{
#endif
/**
* .
* @param username - <I>
* @param password - <I>
* @param dbname - <I> SID
* @return - OCI_OK or error code
*
* ORACLE
*/
extern int ConnServer(char* username, char* password, char* dbname);
/**
* SQL.
* @param SQL - <I> SQL
* @return - OCI_OK or error code
*
* ORACLE
*/
extern int ExecuteSQLNoInputParam(char* SQL);
/**
* SQL.
* @param SQL - <I> SQL
* @param inputValueCount - <I>
* @param inputValue - <I>
* @return - OCI_OK or error code
*
* ORACLE
*/
extern int ExecuteSQL(char* SQL, int inputValueCount, char** inputValue);
/**
* SQL.
* @param SQL - <I> SQL
* @param outputColumn - <O>
* @param outputValueCount - <O>
* @param outputValue - <O>
* @return - OCI_OK or error code
*
* ORACLE
*/
extern int QuerySQLNoInputParam(char* SQL, int* outputColumn, int* outputValueCount, char**** outputValue);
/**
* SQL.
* @param SQL - <I> SQL
* @param inputValueCount - <I>
* @param inputValue - <I>
* @param outputColumn - <O>
* @param outputValueCount - <O>
* @param outputValue - <O>
* @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

@ -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

@ -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”的声明
正在生成代码...

@ -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\|

@ -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

@ -0,0 +1,2 @@
#v4.0:v110:false
Release|x64|D:\工作项目\东富龙\DFL_WL_BOM_TOERP\DFL_WL_BOM_TOERP\|

@ -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<char,std::char_traits<char>,std::allocator<char>>”需要有 dll 接口由 class“IFail”的客户端使用
C:\VS2019\VC\Tools\MSVC\14.29.30133\include\xstring(4871): message : 参见“std::basic_string<char,std::char_traits<char>,std::allocator<char>>”的声明
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

@ -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 - 副本\|

@ -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

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<ProjectOutputs>
<ProjectOutput>
<FullPath>D:\source\东富龙\DFL_WL_BOM_TOSRM\x64\Release\DFL_WL_BOM_TOSRM.exe</FullPath>
</ProjectOutput>
</ProjectOutputs>
<ContentFiles />
<SatelliteDlls />
<NonRecipeFileRefs />
</Project>

@ -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\|
Loading…
Cancel
Save