first commit

main
李建辉 1 month ago
commit 018e3e9815

Binary file not shown.

@ -0,0 +1,28 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SignOff_itk", "SignOff_itk\SignOff_itk.vcxproj", "{8240A4EB-EBA7-448B-B846-2FEC53074C73}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Debug|x64.ActiveCfg = Debug|x64
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Debug|x64.Build.0 = Debug|x64
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Debug|x86.ActiveCfg = Release|x64
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Debug|x86.Build.0 = Release|x64
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Release|x64.ActiveCfg = Release|x64
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Release|x64.Build.0 = Release|x64
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Release|x86.ActiveCfg = Release|Win32
{8240A4EB-EBA7-448B-B846-2FEC53074C73}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Binary file not shown.

Binary file not shown.

@ -0,0 +1,99 @@
#include "CRUL_server_call_httpserver.h"
#include <map>
#include <string>
#include "common_itk_util.h"
//#define HTTP_HOST "localhost"
#define HTTP_POST 9293
void callHttpserver(string signinfoJsonString,char * HTTP_HOST)
{
CURL *curl;
CURLcode res;
char httpUrl[1028] = "\0";
curl = curl_easy_init();
sprintf(httpUrl,"http://%s:%d/server/signoff",HTTP_HOST,HTTP_POST);
if (curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, httpUrl);
//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, "Accept-Charset: GBK");
headers = curl_slist_append(headers, "Content-Type: application/json;charset=GBK");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
WriteLog("发送内容:%s完\n", signinfoJsonString.c_str());
//printf("data=>%s\n",signinfoJsonString.c_str());
const char *data = signinfoJsonString.c_str();
WriteLog("1======\n" );
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
WriteLog("2======%s\n", data);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
WriteLog("3======\n");
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20);
WriteLog("4======\n");
res = curl_easy_perform(curl);
WriteLog("返回值:%d\n", res);
}
curl_easy_cleanup(curl);
}
void callHttpserverDwgtopdf(string signinfoJsonString, char* HTTP_HOST)
{
CURL* curl;
CURLcode res;
char httpUrl[1028] = "\0";
curl = curl_easy_init();
sprintf(httpUrl, "http://%s:%d/server/dwgtopdf", HTTP_HOST, HTTP_POST);
if (curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, httpUrl);
//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, "Accept-Charset: GBK");
headers = curl_slist_append(headers, "Content-Type: application/json;charset=GBK");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
WriteLog("发送内容:%s\n", signinfoJsonString.c_str());
// printf("data=>%s\n", signinfoJsonString.c_str());
const char* data = signinfoJsonString.c_str();
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20);
res = curl_easy_perform(curl);
WriteLog("返回值:%d\n", res);
}
curl_easy_cleanup(curl);
}
void callHttpserverMail(string signinfoJsonString, char* HTTP_HOST)
{
CURL* curl;
CURLcode res;
char httpUrl[4096] = "\0";
WriteLog("内容长度%d\n", signinfoJsonString.size());
curl = curl_easy_init();
sprintf(httpUrl, "http://%s:%d/server/sendmail", HTTP_HOST, HTTP_POST);
// printf("call=>%s \n", httpUrl);
WriteLog("发送的路径:%s\n", httpUrl);
if (curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, httpUrl);
//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, "Accept-Charset: GBK");
headers = curl_slist_append(headers, "Content-Type: application/json;charset=GBK");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// curl_easy_setopt(curl, CURLOPT_HTTPHEADER, "Expect:");
WriteLog("发送内容:%s\n", signinfoJsonString.c_str());
// printf("data=>%s\n", signinfoJsonString.c_str());
const char* data = signinfoJsonString.c_str();
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20);
res = curl_easy_perform(curl);
WriteLog("返回值:%d\n", res);
}
curl_easy_cleanup(curl);
}

@ -0,0 +1,7 @@
#include <iostream>
#include <Windows.h>
#include <curl\curl.h>
using namespace std;
void callHttpserver(string signinfoJsonString,char * HTTP_HOST);
void callHttpserverDwgtopdf(string signinfoJsonString, char* HTTP_HOST);
void callHttpserverMail(string signinfoJsonString, char* HTTP_HOST);

@ -0,0 +1,646 @@
#include "Supor_register.h"
#define SIGN_RELATION "S8SignOffR"
#define SIGN_INFO_OPTION "Supor_signoff_dataset"
#include <regex>
#include <chrono>
#include <ctime>
#include "sa/sa.h"
#include <tc\preferences.h>
#include <ae/datasettype.h>
#include <res/reservation.h>
#include <ae/ae.h>
#include <tccore//grm.h>
#include <exception>
extern "C" int POM_AM__set_application_bypass(logical bypass);
using namespace std;
//发布对象
int set_release_status2(tag_t item, char release_name[]) {
int ifail = ITK_ok;
tag_t release_status = NULL;
ITKCALL(ifail = RELSTAT_create_release_status(release_name, &release_status));
ITKCALL(ifail = RELSTAT_add_release_status(release_status, 1, &item, TRUE));
return ifail;
}
/**
*
* ItemRevision
*
*/
int checkIsItemRevision2(tag_t objtag, logical & isItems) {
tag_t type = NULLTAG;
tag_t item_type = NULLTAG;
ITKCALL2(TCTYPE_ask_object_type(objtag, &type));
ITKCALL2(TCTYPE_find_type("ItemRevision", "", &item_type));
if (item_type != NULLTAG) {
logical isok = FALSE;
ITKCALL2(TCTYPE_is_type_of(type, item_type, &isok));
if (isok) {
isItems = TRUE;
}
else {
isItems = FALSE;
}
}
return 0;
}
//导入数据集
int import_dataset_file_binary(tag_t dataset, const char* temp_path, const char *ref_name, char *ext, char *fullfilename, char *original_name)
{
int ifail = ITK_ok;
tag_t new_file_tag = NULLTAG;
IMF_file_t file_descriptor = NULL;
AOM_refresh(dataset, FALSE);
char *new_file_name = NULL;
char new_ds_name[WSO_name_size_c + 1] = "";
char *filename = NULL;
new_file_name = USER_new_file_name(new_ds_name, ref_name, ext, 0);
filename = strrchr(fullfilename, '\\') + 1;
if (filename == NULL)
return ITK_ok;
ifail = IMF_import_file(fullfilename, new_file_name, SS_BINARY, &new_file_tag, &file_descriptor);
ifail = IMF_set_original_file_name2(new_file_tag, original_name);
ifail = IMF_close_file(file_descriptor);
ifail = AOM_save_with_extensions(new_file_tag);
AOM_unlock(new_file_tag);
ifail = AOM_refresh(new_file_tag, FALSE);
//添加至命名引用
ifail = AOM_lock(dataset);
if (ifail != ITK_ok) { return ifail; }
ifail = RES_checkout2(dataset, "import file", NULL, temp_path, RES_EXCLUSIVE_RESERVE);
if (ifail != ITK_ok) { return ifail; }
ifail = AE_remove_dataset_named_ref2(dataset, ref_name);
if (ifail != ITK_ok) { return ifail; }
ifail = AOM_save_with_extensions(dataset);
ifail = AE_add_dataset_named_ref2(dataset, ref_name, AE_PART_OF, new_file_tag);
AOM_save_with_extensions(dataset);
ifail = RES_checkin(dataset);
AOM_unlock(dataset);
//ITKCALL( AOM_refresh( dataset, FALSE ) );
return ifail;
}
int Connor_creo_dataset(EPM_action_message_t msg)
{
char *log_file = NULL;
CreateLogFile("Connor_creo_dataset", &log_file);
WriteLog("*************************************************************\n");
WriteLog("* Connor_creo_dataset is strat ! *\n");
WriteLog("*************************************************************\n");
printf("*************************************************************\n");
printf("* Connor_creo_dataset is strat ! *\n");
printf("*************************************************************\n");
starTime();
//===============业务====================
string signJson;
string signInfo;
int arg_cnt = 0,
ifail = ITK_ok,
attachesCount = 0;
char *arg = NULL,
*argflag = NULL,
*argvalue = NULL,
typeClass[TCTYPE_class_name_size_c + 1] = "\0";
char issignpdf[16] = "true",
sign_relation[56] = "\0",
sign_info_option[56] = "\0",
tcdepartmentid[56] = "\0",
tccomponentuid[56] = "\0",
tcdatasetuid[56] = "\0",
tccomponentrelation[56] = "\0",
pdfuid[56] = "\0",
tcpdfrelation[56] = "\0",
serverhost[56] = "\0",
processid[56] = "\0",
dwgtype[56] = "\0",
userid[56] = "\0",
objectType[56] = "\0",
tcstatus[56] = "\0",
taskpuid[56] = "\0",
picture[1024] = "\0",
location[1024] = "\0",
picture2[1024] = "\0",
location2[1024] = "\0",
ismergepdf[16] = "\0",
isaddtask[16] = "\0"; // *
//ismj[16] = "\0";
vector<string> relationVec;
vector<string> datasetTypeVec;
vector<string> parameterVec;
tag_t rootTask = NULLTAG,
*taskAttches = NULL,
attachTag = NULLTAG,
relation = NULLTAG;
int grmSecondCount = 0;
tag_t *grmSecondTags = NULL;
char * tempValue = NULL;
arg_cnt = TC_number_of_arguments(msg.arguments);
if (arg_cnt > 0)
{
for (int i = 0; i<arg_cnt; i++)
{
arg = TC_next_argument(msg.arguments);
ITKCALL2(ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue));
if (stricmp(argflag, "issignpdf") == 0) {
if (argvalue != NULL)
{
WriteLog("-issignpdf=%s", argvalue);
tc_strcpy(issignpdf, argvalue);
}
}
if (stricmp(argflag, "processid") == 0) {
if (argvalue != NULL)
{
WriteLog("-processid=%s", argvalue);
tc_strcpy(processid, argvalue);
}
}
if (stricmp(argflag, "sign_relation") == 0) {
if (argvalue != NULL)
{
WriteLog("-sign_relation=%s", argvalue);
tc_strcpy(sign_relation, argvalue);
}
}
if (stricmp(argflag, "sign_info_option") == 0) {
if (argvalue != NULL)
{
WriteLog("-sign_info_option=%s", argvalue);
tc_strcpy(sign_info_option, argvalue);
}
}
if (stricmp(argflag, "serverhost") == 0) {
if (argvalue != NULL)
{
WriteLog("-serverhost=%s", argvalue);
tc_strcpy(serverhost, argvalue);
}
}
if (stricmp(argflag, "relation") == 0) {
if (argvalue != NULL)
{
WriteLog("-relation=%s", argvalue);
Split(argvalue, ",", relationVec);
}
}
if (stricmp(argflag, "datasettype") == 0) {
if (argvalue != NULL)
{
WriteLog("-datasettype=%s", argvalue);
Split(argvalue, ",", datasetTypeVec);
}
}
if (stricmp(argflag, "dwgtype") == 0) {
if (argvalue != NULL)
{
WriteLog("-dwgtype=%s", argvalue);
tc_strcpy(dwgtype, argvalue);
}
}
if (stricmp(argflag, "tcdepartmentid") == 0) {
if (argvalue != NULL)
{
WriteLog("-tcdepartmentid=%s", argvalue);
tc_strcpy(tcdepartmentid, argvalue);
}
}
if (stricmp(argflag, "tcpdfrelation") == 0) {
if (argvalue != NULL)
{
WriteLog("-tcpdfrelation=%s\n", argvalue);
tc_strcpy(tcpdfrelation, argvalue);
}
}
if (stricmp(argflag, "tcstatus") == 0) {
if (argvalue != NULL)
{
WriteLog("-tcstatus=%s\n", argvalue);
tc_strcpy(tcstatus, argvalue);
}
}
if (stricmp(argflag, "picture") == 0) {
if (argvalue != NULL)
{
WriteLog("-picture=%s\n", argvalue);
tc_strcpy(picture, argvalue);
}
}
if (stricmp(argflag, "location") == 0) {
if (argvalue != NULL)
{
WriteLog("-location=%s\n", argvalue);
tc_strcpy(location, argvalue);
}
}
if (stricmp(argflag, "picture2") == 0) {
if (argvalue != NULL)
{
WriteLog("-picture2=%s\n", argvalue);
tc_strcpy(picture2, argvalue);
}
}
if (stricmp(argflag, "location2") == 0) {
if (argvalue != NULL)
{
WriteLog("-location2=%s\n", argvalue);
tc_strcpy(location2, argvalue);
}
}
if (stricmp(argflag, "ismergepdf") == 0) {
if (argvalue != NULL)
{
WriteLog("-ismergepdf=%s\n", argvalue);
tc_strcpy(ismergepdf, argvalue);
}
}
if (stricmp(argflag, "isaddtask") == 0) {
if (argvalue != NULL)
{
WriteLog("-isaddtask=%s\n", argvalue);
tc_strcpy(isaddtask, argvalue);
}
}
MEM_free(argflag);
MEM_free(argvalue);
}
}
parameterVec.push_back(tcpdfrelation);
//================遍历流程对象====================
ITKCALL2(EPM_ask_root_task(msg.task, &rootTask));
ITKCALL2(EPM_ask_attachments(rootTask, EPM_target_attachment, &attachesCount, &taskAttches));
WriteLog("流程目标个数:%d\n", attachesCount);
printf("流程目标个数:%d\n", attachesCount);
POM_AM__set_application_bypass(true);
vector<tag_t> gywdVec;
for (int i = 0; i < attachesCount; i++)
{
attachTag = taskAttches[i];
logical isRev = false;
char *object_name = NULL;
AOM_ask_value_string(attachTag, "object_name", &object_name);
checkIsItemRevision2(attachTag, isRev);
if (!isRev)
{
WriteLog("对象[%d]不是ItemRevision\n", taskAttches[i]);
printf("对象[%d]不是ItemRevision\n", taskAttches[i]);
continue;
}
// 第一步判断是不是creoIMAN_specification
tag_t *is_c_tags = NULLTAG;
int is_c_tags_num = 0;
AOM_ask_value_tags(attachTag, "IMAN_specification", &is_c_tags_num, &is_c_tags);
printf("is_c_tags_num: %d\n", is_c_tags_num);
boolean flag1 = false, flag2 = false;
for (int k = 0; k < is_c_tags_num; k++) {
tag_t dataTag = is_c_tags[k];
char *dataName = NULL, *dataType = NULL, *object_desc = NULL;
AOM_ask_value_string(dataTag, "object_string", &dataName);
AOM_ask_value_string(dataTag, "object_type", &dataType);
AOM_ask_value_string(dataTag, "object_desc", &object_desc);
WriteLog("is_c_tags_num duix:%s, leixing:%s\n", dataName, dataType);
if (strcmp(dataType,"ProDrw") == 0) {
flag1 = true; // 有creo
}
if (strcmp(dataType, "LB2_CAD") == 0) {
flag2 = true; // 有cad
}
}
// 只有无cad且有creo时才执行此handler
if (!(flag1 && !flag2)) {
continue;
}
WriteLog("is creo\n");
printf("is creo\n");
// 第一步获得指定关系下所有的数据集tcpdfrelation
tag_t *all_pdf = NULLTAG;
int allPdFnum = 0;
AOM_ask_value_tags(attachTag, tcpdfrelation,&allPdFnum,&all_pdf);
WriteLog("num: %d\n", allPdFnum);
printf("num: %d\n", allPdFnum);
for (int k = 0; k < allPdFnum; k++) {
tag_t dataTag = all_pdf[k];
char *dataName = NULL, *dataType = NULL, *object_desc = NULL;
AOM_ask_value_string(dataTag, "object_string", &dataName);
AOM_ask_value_string(dataTag, "object_type", &dataType);
AOM_ask_value_string(dataTag, "object_desc", &object_desc);
WriteLog("duix:%s, leixing:%s\n", dataName, dataType);
printf("duix:%s, leixing:%s\n", dataName, dataType);
// *更改逻辑由于改了creo判断方法将这里改成把没动过的源pdf的描述改成From iPEM
if (strcmp(object_desc, "From iPEM copy") == 0 || strcmp(object_desc, "From iPEM success") == 0) {
WriteLog("no yuan creo,tiaoguo\n");
printf("no yuan creo,tiaoguo\n");
continue;
}
AOM_lock(dataTag);
AOM_set_value_string(dataTag, "object_desc", "From iPEM"); // 把没动过的源pdf的描述改成From iPEM
AOM_save(dataTag);
AOM_unlock(dataTag);
AOM_refresh(dataTag, false);
//if (strcmp(object_desc, "From iPEM") != 0 && strcmp(object_desc, "FromiPEM") != 0) {
// printf("no creo,tiaoguo\n");
// continue;
//}
//printf("is creo\n");
if (strcmp(dataType, "PDF") == 0) {
// 先把pdf导出
char *temp_dir = "D:\\creoExPdf";
char temp_file[SS_MAXPATHLEN] = "";
// *
strcpy(temp_file, "D:\\creoExPdf");
strcat(temp_file, "\\");
strcat(temp_file, dataName);
strcat(temp_file, "-");
strcat(temp_file, object_name);
strcat(temp_file, ".pdf");
WriteLog("temp_file:%s\n", temp_file);
printf("temp_file:%s\n", temp_file);
AE_reference_type_t reference_type;
tag_t ref_object = NULLTAG;
char ref_name[WSO_name_size_c + 1] = "PDF_Reference";
AE_ask_dataset_named_ref2(dataTag, ref_name, &reference_type, &ref_object);
IMF_export_file(ref_object, temp_file);
// 再把pdf上传
//获得数据集
tag_t relation_type = NULLTAG, relation = NULLTAG;
ITKCALL(ifail = GRM_find_relation_type("IMAN_specification", &relation_type));
char pdf_name[SS_MAXPATHLEN] = "";
strcat(pdf_name, dataName);
strcat(pdf_name, "-");
strcat(pdf_name, object_name);
tag_t pdfTypeTag = NULLTAG, tool = NULLTAG, datasetTag = NULLTAG;
ITKCALL(ifail = AE_find_datasettype2("PDF", &pdfTypeTag));
ITKCALL(ifail = AE_create_dataset_with_id(pdfTypeTag, pdf_name, "", "", "A", &datasetTag));
ITKCALL(ifail = AE_ask_datasettype_def_tool(pdfTypeTag, &tool));
ITKCALL(ifail = AE_set_dataset_tool(datasetTag, tool));
ITKCALL(ifail = AE_set_dataset_format2(datasetTag, "PDF"));
ITKCALL(ifail = AOM_save_without_extensions(datasetTag));
if (datasetTag == NULLTAG) {
WriteLog("create %s fail\n", pdf_name);
printf("create %s fail\n", pdf_name);
continue;
}
WriteLog("create %s success\n", pdf_name);
printf("create %s success\n", pdf_name);
ITKCALL(ifail = GRM_create_relation(attachTag, datasetTag, relation_type, NULLTAG, &relation));
ITKCALL(GRM_save_relation(relation));
strcat(pdf_name, ".pdf");
//import_dataset_file_binary(datasetTag, "D:/createItem/createProject", "PDF_Reference", "pdf", temp_file, (char*)doName[i].c_str());
import_dataset_file_binary(datasetTag, getenv("temp"), "PDF_Reference", "pdf", temp_file, pdf_name);
AOM_lock(datasetTag);
AOM_set_value_string(datasetTag,"object_desc","From iPEM copy"); // 待签章pdf
AOM_save(datasetTag);
AOM_unlock(datasetTag);
AOM_refresh(datasetTag, false);
if (remove(temp_file) == 0) {
WriteLog("remove success\n");
printf("remove success\n");
}
else {
WriteLog("remove fail\n");
printf("remove fail\n");
}
}
}
}
POM_AM__set_application_bypass(false);
WriteLog("*************************************************************\n");
WriteLog("* Connor_creo_dataset is end ! *\n");
WriteLog("*************************************************************\n");
printf("*************************************************************\n");
printf("* Connor_creo_dataset is end ! *\n");
printf("*************************************************************\n");
CloseLog();
return ifail;
}
void change_release_status(tag_t wso_tag, char *old_release_status, char *new_release_status)
{
int ifail = ITK_ok;
int n_statuses = 0;
tag_t *statuses = NULL;
ITKCALL(ifail = WSOM_ask_release_status_list(wso_tag, &n_statuses, &statuses));
for (int i = 0; i < n_statuses; i++)
{
char *existing_status = NULL;
ITKCALL(ifail = RELSTAT_ask_release_status_type(statuses[i], &existing_status));
if (strcmp(existing_status, old_release_status) == 0 || strcmp(old_release_status, "ALL") == 0)
{
ITKCALL(ifail = AOM_refresh(statuses[i], TRUE));
ITKCALL(ifail = RELSTAT_set_release_status_type(statuses[i], new_release_status));
ITKCALL(ifail = AOM_save(statuses[i]));
ITKCALL(ifail = AOM_refresh(statuses[i], FALSE));
ITKCALL(ifail = AOM_unload(statuses[i]));
}
}
if (statuses) MEM_free(statuses);
}
int Connor_setPDF_status(EPM_action_message_t msg) {
//===============业务====================
string signJson;
string signInfo;
int arg_cnt = 0,
ifail = ITK_ok,
attachesCount = 0;
char *arg = NULL,
*argflag = NULL,
*argvalue = NULL,
typeClass[TCTYPE_class_name_size_c + 1] = "\0";
vector<string> relationVec;
vector<string> datasetTypeVec;
vector<string> parameterVec;
tag_t rootTask = NULLTAG,
*taskAttches = NULL,
attachTag = NULLTAG,
relation = NULLTAG;
int grmSecondCount = 0;
tag_t *grmSecondTags = NULL;
char * tempValue = NULL;
arg_cnt = TC_number_of_arguments(msg.arguments);
//================遍历流程对象====================
ITKCALL2(EPM_ask_root_task(msg.task, &rootTask));
ITKCALL2(EPM_ask_attachments(rootTask, EPM_target_attachment, &attachesCount, &taskAttches));
WriteLog("流程目标个数:%d\n", attachesCount);
string status = "";
arg_cnt = TC_number_of_arguments(msg.arguments);
if (arg_cnt > 0) {
for (int i = 0; i < arg_cnt; i++) {
arg = TC_next_argument(msg.arguments);
ITKCALL(ifail = ITK_ask_argument_named_value(arg, &argflag, &argvalue));
if (strcmp(argflag, "status") == 0) {
status.assign(argvalue);
}
MEM_free(argflag);
MEM_free(argvalue);
}
}
POM_AM__set_application_bypass(true);
vector<tag_t> gywdVec;
for (int i = 0; i < attachesCount; i++)
{
attachTag = taskAttches[i];
logical isRev = false;
char *object_name = NULL;
AOM_ask_value_string(attachTag, "object_name", &object_name);
char *object_desc = NULL;
AOM_ask_value_string(attachTag, "object_desc", &object_desc);
char *dataType = NULL;
AOM_ask_value_string(attachTag, "object_type", &dataType);
char *statusDX = "TCM Released";
//if (strcmp(dataType, "PDF") != 0) {
// statusDX = (char*)status.c_str();
//}
//else {
if (strcmp(object_desc, "From iPEM") == 0 && strcmp(dataType, "PDF") == 0) {
printf("is creo,set zhuang tai\n");
}
else {
if (status != "TCM Released") {
statusDX = (char*)status.c_str();
}
}
//}
// 给新数据集添加状态
AOM_lock(attachTag);
char* status_name = NULL;
//char release_name[128 + 1] = "TCM Released";
set_release_status2(attachTag, statusDX);
AOM_save(attachTag);
AOM_unlock(attachTag);
AOM_refresh(attachTag, false);
//checkIsItemRevision2(attachTag, isRev);
//if (!isRev)
//{
// WriteLog("对象[%d]不是ItemRevision\n", taskAttches[i]);
// continue;
//}
//// 第一步获得指定关系下所有的数据集tcpdfrelation
//tag_t *all_pdf = NULLTAG;
//int allPdFnum = 0;
//AOM_ask_value_tags(attachTag, "IMAN_specification", &allPdFnum, &all_pdf);
//printf("num: %d\n", allPdFnum);
//for (int k = 0; k < allPdFnum; k++) {
// tag_t dataTag = all_pdf[k];
// char *dataName = NULL, *dataType = NULL, *object_desc = NULL;
// AOM_ask_value_string(dataTag, "object_string", &dataName);
// AOM_ask_value_string(dataTag, "object_type", &dataType);
// AOM_ask_value_string(dataTag, "object_desc", &object_desc);
// printf("duix:%s, leixing:%s\n", dataName, dataType);
// if (strcmp(object_desc, "From iPEM") == 0) {
// printf("is creo,set zhuang tai\n");
// // 修改数据集状态
// //change_release_status(dataTag, "LB2_KM", "TCM Released"); // 是开模,转成发布
// //change_release_status(dataTag, "ALL", "TCM Released"); // 只要有状态,全转成发布
// int rel_cnt = 0;
// tag_t *releases;
// ITKCALL(AOM_ask_value_tags(dataTag, "release_status_list", &rel_cnt, &releases));
// for (int j = rel_cnt - 1; j > -1; j--)
// {
// //EPM_remove_status_from_targets(releases[j], dataTag);
// //EPM_remove_status_from_targets(releases[j], rootTask); // 一版
// tag_t gx_type = NULLTAG;
// ITKCALL(GRM_find_relation_type("release_status_list", &gx_type));
// tag_t gx_relation = NULLTAG;
// GRM_find_relation(dataTag, releases[j], gx_type, &gx_relation);
// GRM_delete_relation(gx_relation);
// }
// // 给新数据集添加状态
// AOM_lock(dataTag);
// char* status_name = NULL;
// char release_name[128 + 1] = "TCM Released";
// set_release_status2(dataTag, release_name);
// AOM_save(dataTag);
// AOM_unlock(dataTag);
// AOM_refresh(dataTag, false);
// }
//}
}
POM_AM__set_application_bypass(false);
return ifail;
}

@ -0,0 +1,896 @@
#include "Supor_register.h"
#define SIGN_RELATION "S8SignOffR"
#define SIGN_INFO_OPTION "Supor_signoff_dataset"
extern "C" int POM_AM__set_application_bypass(logical bypass);
using namespace std;
int getPrefStrings( const char *preference, vector<string> &pref_vec )
{
int ifail = ITK_ok , i = 0, j = 0, k =0, num = 0;
char **values;
ITKCALL2( ifail = PREF_ask_char_values( preference, &num, &values ) );
for(i = 0; i < num; i++)
{
pref_vec.push_back(values[i]);
}
DOFREE(values);
return ifail;
}
/**
*
* ItemRevision
*
*/
int checkIsItemRevision(tag_t objtag,logical & isItems){
tag_t type = NULLTAG;
tag_t item_type = NULLTAG;
ITKCALL2(TCTYPE_ask_object_type(objtag,&type));
ITKCALL2(TCTYPE_find_type("ItemRevision","",&item_type));
if(item_type != NULLTAG){
logical isok = FALSE;
ITKCALL2(TCTYPE_is_type_of(type,item_type,&isok));
if(isok){
isItems = TRUE;
}else{
isItems = FALSE;
}
}
return 0;
}
/**
* mappingjson
* paramMap mapping
* jsonString json
*/
int stringToJson(map<string,string> paramMap,string &jsonString)
{
std::map<string, string>::iterator iter;
jsonString.assign("{");
int tempIndex = 0;
int mapCount = paramMap.size();
for (iter=paramMap.begin(); iter!=paramMap.end(); iter++)
{
jsonString.append("\"");
jsonString.append(iter->first);
jsonString.append("\":\"");
jsonString.append(iter->second);
jsonString.append("\"");
if(tempIndex != (mapCount-1)){
jsonString.append(",");
}
tempIndex ++ ;
}
jsonString.append("}");
return 0;
}
/**
*
* paramMap
* paraName signinfos
* json json
* jsonString
*/
int stringToJsonPlus(map<string,string> paramMap, string paraName,string json ,string &jsonString)
{
std::map<string, string>::iterator iter;
jsonString.assign("{");
for (iter=paramMap.begin(); iter!=paramMap.end(); iter++)
{
jsonString.append("\"");
jsonString.append(iter->first);
jsonString.append("\":\"");
jsonString.append(iter->second);
jsonString.append("\",");
}
jsonString.append("\"");
jsonString.append(paraName);
jsonString.append("\":");
jsonString.append(json);
jsonString.append("}");
return 0;
}
/**
*
* paramMap
* signInfoMap
* signJson json
*/
//void getSignoffInfoJson(map<string,string> paramMap ,map<string,string> signInfoMap,string &signJson)
//{
// string signInfo ;
// stringToJson(signInfoMap,signInfo);
// stringToJsonPlus(paramMap,"signinfos",signInfo,signJson);
//}
/**
* map
* revisionRevTag
* signInfoMap map
*/
void getSignoffInfoJson(tag_t revisionRevTag,map<string,string> &signInfoMap,char * processid,char *sign_relation,char *sign_info_option){
tag_t * signoffFormTags = NULL;
tag_t signFormTag = NULLTAG;
int signoffFormCount = 0;
char* tempValue = NULL;
ITKCALL2(AOM_ask_value_tags(revisionRevTag, sign_relation,&signoffFormCount,&signoffFormTags));
WriteLog("签名表单个数:%d\n",signoffFormCount);
if(signoffFormCount > 0){
signFormTag = signoffFormTags[0];
}
DOFREE(signoffFormTags);
if(signFormTag == NULLTAG){
WriteLog("没有获取到签名表单\n");
return;
}
vector<string> signoffVec ;
getPrefStrings(sign_info_option,signoffVec);
WriteLog("首选项[%s]=[%d]\n", sign_info_option,signoffVec.size());
for (int i = 0; i < signoffVec.size(); i++) {
vector<string> secondVec ;
Split(signoffVec[i],":",secondVec);
string signinfoValue ;
if(secondVec.size() !=2){
secondVec.clear();
continue;
}
if(strcmp(secondVec[0].c_str(),processid) != 0){
secondVec.clear();
continue;
}
signinfoValue.assign(secondVec[1]);
secondVec.clear();
Split( signinfoValue,";",secondVec);
for(int j = 0;j <secondVec.size();j++){
WriteLog("111\n");
vector<string> thirdVec ;
WriteLog("222\n");
Split( secondVec[j],"=",thirdVec);
WriteLog("333\n");
if(thirdVec.size() == 2){
PROP_value_type_t propertyValueType;
char * propertyType = NULL;
WriteLog("444\n");
ITKCALL2(AOM_ask_value_type(signFormTag,thirdVec[0].c_str(),&propertyValueType,&propertyType));
WriteLog("属性:%s\n", thirdVec[0].c_str());
if(propertyValueType == 8){
char valueTemp[128] = "\0";
ITKCALL2(AOM_ask_value_string(signFormTag,thirdVec[0].c_str(),&tempValue));
WriteLog("属性:%s, 内容:%s\n", thirdVec[0].c_str(), tempValue);
if (strcmp(ISNULL(tempValue), "") != 0) {
//char* tempValueGBK = tempValue;
// char* thirdVecGBK = thirdVec[1].c_str();
//sprintf(valueTemp, "%s%s%s", picpath, tempValueGBK, picext);
signInfoMap.insert(pair<string, string>(thirdVec[1], tempValue));
DOFREE(tempValue);
// DOFREE(tempValueGBK);
// DOFREE(thirdVecGBK);
}
}else if(propertyValueType == 2){
date_t date;
AOM_ask_value_date(signFormTag,thirdVec[0].c_str(),&date);
if(date.year > 1000){
// char* thirdVecGBK = thirdVec[1].c_str());
ITKCALL2(DATE_date_to_string(date,"%Y/%m/%d",&tempValue));
signInfoMap.insert(pair<string,string>(thirdVec[1],tempValue));
DOFREE(tempValue);
// DOFREE(thirdVecGBK);
}
}
DOFREE(propertyType);
}
thirdVec.clear();
}
secondVec.clear();
break;
}
}
void sendMessageToService(tag_t attachTag, tag_t rootTask,tag_t datasetTag,vector<string> parameterVec,string relation,string ismergepdf, string signInfo) {
string signJson;
char* tempValue = NULL;
char tcdepartmentid[56] = "\0",
tccomponentuid[56] = "\0",
tcdatasetuid[56] = "\0",
tccomponentrelation[56] = "\0",
userid[56] = "\0",
taskpuid[56] = "\0",
pdfuid[56] = "\0",
objectType[56] = "\0";
char issignpdf[56] = "\0",
dwgtype[56] = "\0",
tcpdfrelation[56] = "\0",
tcstatus[56] = "\0",
serverhost[56] = "\0",
isaddtask[16] = "\0",
isdwgtopdf[16] = "\0";
strcpy(issignpdf, parameterVec[0].c_str());
strcpy(dwgtype, parameterVec[1].c_str());
strcpy(tcpdfrelation, parameterVec[2].c_str());
strcpy(tcstatus, parameterVec[3].c_str());
strcpy(serverhost, parameterVec[6].c_str());
strcpy(tcdepartmentid, parameterVec[7].c_str());
strcpy(isaddtask, parameterVec[8].c_str());
strcpy(isdwgtopdf, parameterVec[9].c_str());
strcpy(tccomponentrelation,relation.c_str());
ITK__convert_tag_to_uid(attachTag, &tempValue);
tc_strcpy(tccomponentuid, tempValue);
DOFREE(tempValue);
ITK__convert_tag_to_uid(rootTask, &tempValue);
tc_strcpy(taskpuid, tempValue);
DOFREE(tempValue);
ITKCALL2(AOM_ask_value_string(datasetTag, "object_type", &tempValue));
tc_strcpy(objectType, tempValue);
DOFREE(tempValue);
map<string, string> inMap;
//数据集转换uid
ITK__convert_tag_to_uid(datasetTag, &tempValue);
tc_strcpy(tcdatasetuid, tempValue);
DOFREE(tempValue);
tag_t owningUser = NULLTAG;
ITKCALL2(AOM_ask_value_tag(datasetTag, "owning_user", &owningUser));
ITKCALL2(AOM_ask_value_string(owningUser, "user_id", &tempValue));
tc_strcpy(userid, tempValue);
DOFREE(tempValue);
WriteLog("添加的对象:%s添加的数据集%s,添加的关系%s\n", tccomponentuid, tcdatasetuid, tccomponentrelation);
WriteLog("类型是%s\n", objectType);
//如果数据集是PDF先判断是否是转PDF系统生成的
if (strcmp("PDF", objectType) == 0) {
char selectRecord[1024] = "";
int outputValueCount = 0, outputColumn = 0;
char*** outputValue = NULL;
sprintf(selectRecord, "select itempuid from CONNOR_PDFMESSAGE where pdfpuid='%s' and pdfpuid != datasetpuid ", tcdatasetuid);
if (QuerySQLNoInputParam(selectRecord, &outputColumn, &outputValueCount, &outputValue) != -1) {
if (outputValueCount > 0) {
WriteLog("是系统生成的,跳过:%s\n", tcdatasetuid);
return;
}
}
}
char selectRecord[1024] = "";
int outputValueCount = 0, outputColumn = 0;
char*** outputValue = NULL;
sprintf(selectRecord, "select itempuid,pdfpuid,tcstatus from CONNOR_PDFMESSAGE where itempuid='%s' and datasetpuid='%s' and tcstatus='%s'", tccomponentuid, tcdatasetuid, tcstatus);
WriteLog("查找的数据:%s\n", selectRecord);
if (QuerySQLNoInputParam(selectRecord, &outputColumn, &outputValueCount, &outputValue) != -1) {
WriteLog("查找的结果数量:%d\n", outputValueCount);
if (outputValueCount > 0) {
char updateRecord[1024] = "";
sprintf(updateRecord, "update CONNOR_PDFMESSAGE set taskpuid = :1,signinfo = :2,tcstatus=:3,stage=:4,createdate=sysdate where itempuid='%s' and datasetpuid = '%s' and tcstatus='%s'", tccomponentuid, tcdatasetuid, tcstatus);
WriteLog("更新数据:%s\n", updateRecord);
char** params = (char**)MEM_alloc(4 * sizeof(char*));
params[0] = taskpuid;
params[1] = (char*)signInfo.c_str();
params[2] = tcstatus;
params[3] = ("正在发送到服务");
if (ExecuteSQL(updateRecord, 4, params) == -1)
{
WriteLog("更新数据失败:%s", tcdatasetuid);
}
else
{
ExecuteSQLNoInputParam("commit");
WriteLog("更新数据成功");
}
if (strcmp("", outputValue[0][1]) == 0) {
tc_strcpy(pdfuid, "nopdf");
}
else
{
char selectRecord2[1024] = "";
int outputValueCount2 = 0, outputColumn2 = 0;
char*** outputValue2 = NULL;
sprintf(selectRecord2, "select puid from INFODBA.PPOM_APPLICATION_OBJECT where puid='%s'", outputValue[0][1]);
WriteLog("查找的数据:%s\n", selectRecord2);
if (QuerySQLNoInputParam(selectRecord2, &outputColumn2, &outputValueCount2, &outputValue2) != -1) {
if (outputValueCount2 > 0) {
tc_strcpy(pdfuid, outputValue[0][1]);
}
else
{
WriteLog("数据库查询出的PDF%s 已不存在\n", outputValue[0][1]);
tc_strcpy(pdfuid, "nopdf");
}
}
else
{
WriteLog("数据库查询PDF%s 失败\n", outputValue[0][1]);
tc_strcpy(pdfuid, "nopdf");
}
}
}
else {
char selectRecord3[1024] = "";
int outputValueCount3 = 0, outputColumn3 = 0;
char*** outputValue3 = NULL;
sprintf(selectRecord3, "select itempuid,pdfpuid,tcstatus from CONNOR_PDFMESSAGE where itempuid='%s' and datasetpuid='%s' and tcstatus is null", tccomponentuid, tcdatasetuid);
if (QuerySQLNoInputParam(selectRecord3, &outputColumn3, &outputValueCount3, &outputValue3) != -1) {
WriteLog("查找的结果数量:%d\n", outputValueCount3);
if (outputValueCount3> 0) {
char updateRecord[1024] = "";
sprintf(updateRecord, "update CONNOR_PDFMESSAGE set taskpuid = :1,signinfo = :2,tcstatus=:3,stage=:4,createdate=sysdate where itempuid='%s' and datasetpuid = '%s' and tcstatus is null", tccomponentuid, tcdatasetuid);
WriteLog("更新数据:%s\n", updateRecord);
char** params = (char**)MEM_alloc(4 * sizeof(char*));
params[0] = taskpuid;
params[1] = (char*)signInfo.c_str();
params[2] = tcstatus;
params[3] = ("正在发送到服务");
if (ExecuteSQL(updateRecord, 4, params) == -1)
{
WriteLog("更新数据失败:%s", tcdatasetuid);
}
else
{
ExecuteSQLNoInputParam("commit");
WriteLog("更新数据成功");
}
if (strcmp("", outputValue3[0][1]) == 0) {
tc_strcpy(pdfuid, "nopdf");
}
else
{
char selectRecord2[1024] = "";
int outputValueCount2 = 0, outputColumn2 = 0;
char*** outputValue2 = NULL;
sprintf(selectRecord2, "select puid from INFODBA.PPOM_APPLICATION_OBJECT where puid='%s'", outputValue3[0][1]);
WriteLog("查找的数据:%s\n", selectRecord2);
if (QuerySQLNoInputParam(selectRecord2, &outputColumn2, &outputValueCount2, &outputValue2) != -1) {
if (outputValueCount2 > 0) {
tc_strcpy(pdfuid, outputValue3[0][1]);
}
else
{
WriteLog("数据库查询出的PDF%s 已不存在\n", outputValue3[0][1]);
tc_strcpy(pdfuid, "nopdf");
}
}
else
{
WriteLog("数据库查询PDF%s 失败\n", outputValue3[0][1]);
tc_strcpy(pdfuid, "nopdf");
}
}
}
else
{
char insertRecord[1024] = "";
sprintf(insertRecord, "insert into CONNOR_PDFMESSAGE(itempuid,datasetpuid,signinfo,serverhost,stage,owninguser,departmentid,taskpuid,tcrelation,tcstatus,createdate) values(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,sysdate)");
WriteLog("插入数据:%s\n", insertRecord);
char** params = (char**)MEM_alloc(10 * sizeof(char*));
params[0] = tccomponentuid;
params[1] = tcdatasetuid;
params[2] = (char*)signInfo.c_str();
params[3] = serverhost;
params[4] = "正在发送到服务";
params[5] = userid;
params[6] = tcdepartmentid;
params[7] = taskpuid;
params[8] = tccomponentrelation;
params[9] = tcstatus;
if (ExecuteSQL(insertRecord, 10, params) == -1)
{
WriteLog("保存数据失败2%s", tcdatasetuid);
}
else
{
ExecuteSQLNoInputParam("commit");
WriteLog("保存数据成功");
}
tc_strcpy(pdfuid, "nopdf");
}
}
}
}
else {
WriteLog("查询失败");
tc_strcpy(pdfuid, "nopdf");
}
if (strcmp("PDF", objectType) == 0) {
tc_strcpy(pdfuid, tcdatasetuid);
}
inMap.insert(pair<string, string>("issignpdf", issignpdf));
inMap.insert(pair<string, string>("tccomponentuid", tccomponentuid));
inMap.insert(pair<string, string>("tcdatasetuid", tcdatasetuid));
inMap.insert(pair<string, string>("tccomponentrelation", tccomponentrelation));
inMap.insert(pair<string, string>("pdfuid", pdfuid));
inMap.insert(pair<string, string>("tcdepartmentid", tcdepartmentid));
inMap.insert(pair<string, string>("dwgtype", dwgtype));
inMap.insert(pair<string, string>("isdwgtopdf", isdwgtopdf));
inMap.insert(pair<string, string>("tcpdfrelation", tcpdfrelation));
inMap.insert(pair<string, string>("tcstatus", tcstatus));
inMap.insert(pair<string, string>("taskpuid", taskpuid));
inMap.insert(pair<string, string>("picture", parameterVec[4]));
inMap.insert(pair<string, string>("location", parameterVec[5]));
inMap.insert(pair<string, string>("ismergepdf", ismergepdf));
inMap.insert(pair<string, string>("isaddtask", parameterVec[8]));
// *
//inMap.insert(pair<string, string>("ismj", ismj));
stringToJsonPlus(inMap, "signinfos", signInfo, signJson);
WriteLog("发送的签字数据:%s\n", signJson.c_str());
callHttpserver(signJson, serverhost);
inMap.clear();
map<string, string>().swap(inMap);
}
void sendMessage(tag_t attachTag,tag_t rootTask,vector<string>relationVec, vector<string> datasetTypeVec,vector<string> parameterVec,string signInfo) {
string signJson;
tag_t relationTag=NULLTAG,* grmSecondTags=NULLTAG;
int grmSecondCount = 0;
tag_t datasetTag = NULLTAG;
char* tempValue = NULL;
char objectType[56] = "\0";
for (int j = 0;j < relationVec.size();j++)
{
ITKCALL2(GRM_find_relation_type(relationVec[j].c_str(), &relationTag));
ITKCALL2(GRM_list_secondary_objects_only(attachTag, relationTag, &grmSecondCount, &grmSecondTags));
for (int k = 0;k < grmSecondCount;k++) {
datasetTag = grmSecondTags[k];
ITKCALL2(AOM_ask_value_string(datasetTag, "object_type", &tempValue));
tc_strcpy(objectType, tempValue);
if (std::find(datasetTypeVec.begin(), datasetTypeVec.end(), tempValue) == datasetTypeVec.end())
{
DOFREE(tempValue);
continue;
}
DOFREE(tempValue);
sendMessageToService(attachTag,rootTask,datasetTag,parameterVec,relationVec[j],"",signInfo);
}
DOFREE(grmSecondTags);
}
}
/**
* Connor_signoff_dataset
* handler
* -issignpdf=true
* -tcdepartmentid=sx IDPDF
* -relation=IMAN_specification,IMAN_reference PDF
* -datasettype=MSExcel,MSExcelX,MSWord,MSWordX,PDF PDF
* -sign_relation=S8SignOffR
* -sign_info_option=Supor_signoff_dataset
* -serverhost=172.24.14.164 IP
* -tcpdfrelation=IMAN_specification PDF
* -processid=D
* -dwgtype=S8AutoCAD Dwg
* -tcstatus PDF
*/
int Connor_signoff_dataset(EPM_action_message_t msg)
{
char *log_file=NULL;
CreateLogFile("Connor_signoff_dataset", &log_file);
WriteLog("*************************************************************\n");
WriteLog("* Connor_signoff_dataset is strat ! *\n");
WriteLog("*************************************************************\n");
starTime();
//===============业务====================
string signJson ;
string signInfo;
int arg_cnt = 0 ,
ifail = ITK_ok,
attachesCount = 0;
char *arg = NULL,
*argflag =NULL,
*argvalue=NULL,
typeClass[TCTYPE_class_name_size_c+1]="\0";
char issignpdf[16] = "true",
sign_relation[56] = "\0",
sign_info_option[56] = "\0",
tcdepartmentid[56] = "\0",
tccomponentuid[56] = "\0",
tcdatasetuid[56] = "\0",
tccomponentrelation[56] = "\0",
pdfuid[56] = "\0",
tcpdfrelation[56] = "\0",
serverhost[56] = "\0",
processid[56] = "\0",
dwgtype[56] = "\0",
userid[56] = "\0",
objectType[56] = "\0",
tcstatus[56] = "\0",
taskpuid[56] = "\0",
picture[1024] = "\0",
location[1024] = "\0",
picture2[1024] = "\0",
location2[1024] = "\0",
ismergepdf[16] = "\0",
isaddtask[16] = "\0",
isdwgtopdf[16] = "\0";// *
//ismj[16] = "\0";
vector<string> relationVec;
vector<string> datasetTypeVec;
vector<string> parameterVec;
tag_t rootTask =NULLTAG,
*taskAttches =NULL,
attachTag=NULLTAG,
relation = NULLTAG;
int grmSecondCount =0 ;
tag_t *grmSecondTags = NULL;
char * tempValue = NULL;
arg_cnt = TC_number_of_arguments(msg.arguments);
if (arg_cnt > 0)
{
for (int i=0;i<arg_cnt;i++)
{
arg = TC_next_argument(msg.arguments);
ITKCALL2( ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue));
if (stricmp(argflag, "issignpdf") == 0){
if(argvalue != NULL)
{
WriteLog("-issignpdf=%s",argvalue);
tc_strcpy(issignpdf,argvalue);
}
}
if(stricmp(argflag, "processid") == 0){
if(argvalue != NULL)
{
WriteLog("-processid=%s",argvalue);
tc_strcpy(processid,argvalue);
}
}
if (stricmp(argflag, "sign_relation") == 0) {
if (argvalue != NULL)
{
WriteLog("-sign_relation=%s", argvalue);
tc_strcpy(sign_relation, argvalue);
}
}
if (stricmp(argflag, "sign_info_option") == 0) {
if (argvalue != NULL)
{
WriteLog("-sign_info_option=%s", argvalue);
tc_strcpy(sign_info_option, argvalue);
}
}
if(stricmp(argflag, "serverhost") == 0){
if(argvalue != NULL)
{
WriteLog("-serverhost=%s",argvalue);
tc_strcpy(serverhost,argvalue);
}
}
if(stricmp(argflag, "relation") == 0){
if(argvalue != NULL)
{
WriteLog("-relation=%s",argvalue);
Split(argvalue,",",relationVec);
}
}
if(stricmp(argflag, "datasettype") == 0){
if(argvalue != NULL)
{
WriteLog("-datasettype=%s",argvalue);
Split(argvalue,",",datasetTypeVec);
}
}
if(stricmp(argflag, "dwgtype") == 0){
if(argvalue != NULL)
{
WriteLog("-dwgtype=%s",argvalue);
tc_strcpy(dwgtype,argvalue);
}
}
if(stricmp(argflag, "tcdepartmentid") == 0){
if(argvalue != NULL)
{
WriteLog("-tcdepartmentid=%s",argvalue);
tc_strcpy(tcdepartmentid,argvalue);
}
}
if(stricmp(argflag, "tcpdfrelation") == 0){
if(argvalue != NULL)
{
WriteLog("-tcpdfrelation=%s\n",argvalue);
tc_strcpy(tcpdfrelation,argvalue);
}
}
if (stricmp(argflag, "tcstatus") == 0) {
if (argvalue != NULL)
{
WriteLog("-tcstatus=%s\n", argvalue);
tc_strcpy(tcstatus, argvalue);
}
}
if (stricmp(argflag, "picture") == 0) {
if (argvalue != NULL)
{
WriteLog("-picture=%s\n", argvalue);
tc_strcpy(picture, argvalue);
}
}
if (stricmp(argflag, "location") == 0) {
if (argvalue != NULL)
{
WriteLog("-location=%s\n", argvalue);
tc_strcpy(location, argvalue);
}
}
if (stricmp(argflag, "picture2") == 0) {
if (argvalue != NULL)
{
WriteLog("-picture2=%s\n", argvalue);
tc_strcpy(picture2, argvalue);
}
}
if (stricmp(argflag, "location2") == 0) {
if (argvalue != NULL)
{
WriteLog("-location2=%s\n", argvalue);
tc_strcpy(location2, argvalue);
}
}
if (stricmp(argflag, "ismergepdf") == 0) {
if (argvalue != NULL)
{
WriteLog("-ismergepdf=%s\n", argvalue);
tc_strcpy(ismergepdf, argvalue);
}
}
if (stricmp(argflag, "isaddtask") == 0) {
if (argvalue != NULL)
{
WriteLog("-isaddtask=%s\n", argvalue);
tc_strcpy(isaddtask, argvalue);
}
}
if (stricmp(argflag, "isdwgtopdf") == 0) {
if (argvalue != NULL)
{
WriteLog("-isdwgtopdf=%s\n", argvalue);
tc_strcpy(isdwgtopdf, argvalue);
}
}
MEM_free(argflag);
MEM_free(argvalue);
}
}
parameterVec.push_back(issignpdf);
parameterVec.push_back(dwgtype);
parameterVec.push_back(tcpdfrelation);
parameterVec.push_back(tcstatus);
parameterVec.push_back(picture);
parameterVec.push_back(location);
parameterVec.push_back(serverhost);
parameterVec.push_back(tcdepartmentid);
parameterVec.push_back(isaddtask);
parameterVec.push_back(isdwgtopdf);
//================遍历流程对象====================
ITKCALL2(EPM_ask_root_task( msg.task, &rootTask ));
ITKCALL2(EPM_ask_attachments(rootTask, EPM_target_attachment, &attachesCount, &taskAttches));
WriteLog("流程目标个数:%d\n",attachesCount);
if (SuporConnectionDB() == -1) {
WriteLog("数据库连接失败,请检查配置文件配置\n");
CloseLog();
EMH_store_error_s1(EMH_severity_error, EMH_AE_error_base, "数据库连接失败,请检查配置文件配置");
return 1;
}
POM_AM__set_application_bypass(true);
vector<tag_t> gywdVec;
for(int i=0; i<attachesCount; i++ )
{
attachTag = taskAttches[i];
logical isRev = false;
checkIsItemRevision(attachTag,isRev);
if(!isRev)
{
WriteLog("对象[%d]不是ItemRevision\n",taskAttches[i]);
continue;
}
//从工艺文档下获取工艺路线从工艺路线bom获取没有状态的工序版本
ITKCALL2(AOM_ask_value_string(attachTag, "object_type", &tempValue));
if (strcmp(ismergepdf, "") != 0) {
if (strcmp(tempValue, "LB2_GYWDRevision") == 0) {
gywdVec.push_back(attachTag);
}
else if (strcmp(tempValue, "LB2_MJRevision") == 0) {
map<string, string> inSignoffMap;
getSignoffInfoJson(attachTag, inSignoffMap, processid, sign_relation, sign_info_option);
stringToJson(inSignoffMap, signInfo);
map<tag_t,string> mjMap;
tag_t* grmSecondTags2 = NULLTAG;
int grmSecondCount2 = 0;
char* objectType = NULL;
WriteLog("是模具,开始遍历配置参数中的特定类型\n");
// *
//char *ismj = "1";
for (int j = 0;j < relationVec.size();j++)
{
tag_t relationTag = NULLTAG;
ITKCALL2(GRM_find_relation_type(relationVec[j].c_str(), &relationTag));
ITKCALL2(GRM_list_secondary_objects_only(attachTag, relationTag, &grmSecondCount2, &grmSecondTags2));
for (int k = 0;k < grmSecondCount2;k++) {
ITKCALL2(AOM_ask_value_string(grmSecondTags2[k], "object_type", &objectType));
char* dwg_str = NULL;
ITKCALL2(AOM_ask_value_string(grmSecondTags2[k], "object_string", &dwg_str));
WriteLog("当前dwg:%s\n", dwg_str);
if (std::find(datasetTypeVec.begin(), datasetTypeVec.end(), objectType) == datasetTypeVec.end())
{
WriteLog("跳过\n");
continue;
}
// *在此添加逻辑加入一个判断数据集状态没有状态的加入到mjMap
// 获取发布状态
tag_t *status = NULL;
int snum = 0;
ITKCALL(AOM_ask_value_tags(grmSecondTags2[k], "release_status_list", &snum, &status));
if (snum == 0) {
WriteLog("无状态,加入\n");
mjMap.insert(pair<tag_t, string>(grmSecondTags2[k], relationVec[j]));
}
else{
char *dwg_status_name2 = NULL;
AOM_ask_value_string(status[0], "object_name", &dwg_status_name2);
WriteLog("表面状态:%s\n", dwg_status_name2);
if ((strcmp("TCM Released", dwg_status_name2) != 0) &&
(strcmp("TCM 已发布", dwg_status_name2) != 0) ) {
WriteLog("状态符合,加入\n");
mjMap.insert(pair<tag_t, string>(grmSecondTags2[k], relationVec[j]));
}
/*char *dwg_status_name = NULL;
RELSTAT_ask_release_status_type(grmSecondTags2[k], &dwg_status_name);
WriteLog("状态:%s\n", dwg_status_name);
if ((strcmp("TCM Released", dwg_status_name) != 0)) {
WriteLog("状态符合,加入\n");
mjMap.insert(pair<tag_t, string>(grmSecondTags2[k], relationVec[j]));
}
DOFREE(dwg_status_name);*/
}
}
}
DOFREE(objectType);
int len = 0;
std::map<tag_t, string>::iterator iter;
for (iter = mjMap.begin(); iter != mjMap.end(); iter++) {
if (len == (mjMap.size() - 1)) {
sendMessageToService(attachTag, rootTask, iter->first, parameterVec, iter->second, ismergepdf, signInfo);
}
else
{
sendMessageToService(attachTag, rootTask, iter->first, parameterVec, iter->second, "", signInfo);
}
len++;
}
DOFREE(grmSecondTags2);
inSignoffMap.clear();
map<string, string>().swap(inSignoffMap);
mjMap.clear();
map<tag_t, string>().swap(mjMap);
}
else
{
map<string, string> inSignoffMap;
getSignoffInfoJson(attachTag, inSignoffMap, processid, sign_relation, sign_info_option);
stringToJson(inSignoffMap, signInfo);
if (checkIsInType(attachTag, "MEOPRevision")) {
tag_t* chi_form_list = NULLTAG;
int chi_form_count = 0;
char* lb2_sfgjgx = NULL;
AOM_ask_value_tags(attachTag, "IMAN_master_form_rev", &chi_form_count, &chi_form_list);
if (chi_form_count > 0) {
AOM_ask_value_string(chi_form_list[0], "lb2_sfgjgx", &lb2_sfgjgx);
if (strcmp("", lb2_sfgjgx) == 0 || strcmp("1", lb2_sfgjgx) == 0) {
if (strcmp(picture, "") != 0 && strcmp(picture2, "") != 0) {
string picture_gjgx;
string location_gjgx;
picture_gjgx.assign(picture).append(";").append(picture2);
location_gjgx.assign(location).append(";").append(location2);
parameterVec[4] = picture_gjgx;
parameterVec[5] = location_gjgx;
sendMessage(attachTag, rootTask, relationVec, datasetTypeVec, parameterVec, signInfo);
parameterVec[4] = picture;
parameterVec[5] = location;
}
else
{
sendMessage(attachTag, rootTask, relationVec, datasetTypeVec, parameterVec, signInfo);
}
}
else
{
sendMessage(attachTag, rootTask, relationVec, datasetTypeVec, parameterVec, signInfo);
}
}
else
{
sendMessage(attachTag, rootTask, relationVec, datasetTypeVec, parameterVec, signInfo);
}
DOFREE(lb2_sfgjgx);
DOFREE(chi_form_list);
}
else
{
if (strcmp(tempValue, "PSBOMViewRevision") != 0) {
sendMessage(attachTag, rootTask, relationVec, datasetTypeVec, parameterVec, signInfo);
}
}
}
}
else
{
map<string, string> inSignoffMap;
getSignoffInfoJson(attachTag, inSignoffMap, processid, sign_relation, sign_info_option);
stringToJson(inSignoffMap, signInfo);
sendMessage(attachTag, rootTask, relationVec,datasetTypeVec,parameterVec,signInfo);
}
DOFREE(tempValue);
}
WriteLog("工艺文档数量%d\n",gywdVec.size());
for (int i = 0; i < gywdVec.size(); i++) {
map<string, string> inSignoffMap;
getSignoffInfoJson(gywdVec[i], inSignoffMap, processid, sign_relation, sign_info_option);
stringToJson(inSignoffMap, signInfo);
map<tag_t, string> gywdMap;
tag_t* grmSecondTags2 = NULLTAG, fmTag = NULLTAG;
int grmSecondCount2 = 0;
char* objectType = NULL, * objectName = NULL;
for (int j = 0;j < relationVec.size();j++)
{
tag_t relationTag = NULLTAG;
ITKCALL2(GRM_find_relation_type(relationVec[j].c_str(), &relationTag));
ITKCALL2(GRM_list_secondary_objects_only(gywdVec[i], relationTag, &grmSecondCount2, &grmSecondTags2));
for (int k = 0;k < grmSecondCount2;k++) {
ITKCALL2(AOM_ask_value_string(grmSecondTags2[k], "object_type", &objectType));
if (std::find(datasetTypeVec.begin(), datasetTypeVec.end(), objectType) == datasetTypeVec.end())
{
continue;
}
ITKCALL2(AOM_ask_value_string(grmSecondTags2[k], "object_name", &objectName));
if (strstr(objectName, "封面") != NULL) {
fmTag = grmSecondTags2[k];
}
gywdMap.insert(pair<tag_t, string>(grmSecondTags2[k], relationVec[j]));
}
}
DOFREE(objectType);
DOFREE(objectName);
std::map<tag_t, string>::iterator iter;
for (iter = gywdMap.begin(); iter != gywdMap.end(); iter++) {
if (fmTag == iter->first) {
continue;
}
sendMessageToService(gywdVec[i], rootTask, iter->first, parameterVec, iter->second, "", signInfo);
}
if (fmTag != NULLTAG) {
sendMessageToService(gywdVec[i], rootTask, fmTag, parameterVec, gywdMap[fmTag], ismergepdf, signInfo);
}
DOFREE(grmSecondTags2);
inSignoffMap.clear();
map<string, string>().swap(inSignoffMap);
gywdMap.clear();
map<tag_t, string>().swap(gywdMap);
}
gywdVec.clear();
vector<tag_t>().swap(gywdVec);
POM_AM__set_application_bypass(false);
DisConnServer();
WriteLog("*************************************************************\n");
WriteLog("* Connor_signoff_dataset is end ! *\n");
WriteLog("*************************************************************\n");
CloseLog();
return ifail;
}

@ -0,0 +1,316 @@
#include "Supor_register.h"
using namespace std;
extern "C" int POM_AM__set_application_bypass(logical bypass);
/**
*
* Description:
* This handler will set signoff infomation to properties of rev
*
* Syntax:
*
*
* -SignUserName: ID
*
* -SignDate:
*
* -SignDateFormate: %Y-%m-%d
*
* -SignComment:
*
* -SignRelation:
*
*
*/
int Connor_signoff_form(EPM_action_message_t msg) {
int ifail = ITK_ok;
char* log_file = NULL;
CreateLogFile("Connor_signoff_form", &log_file);
WriteLog("*************************************************************\n");
WriteLog("* Connor_signoff_form is strat ! *\n");
WriteLog("*************************************************************\n");
starTime();
char* arg = NULL,
* argflag = NULL,
* argvalue = NULL,
* tempValue = NULL;
char* task_type = NULL;
char* userName=NULL;
char* person_name = NULL, * type_class = NULL,*user_id=NULL;
int arg_cnt = 0, attachments=0,*attach_type, occur_of_counts=0,form_count;
date_t decision_date;
char SignUserName[56] = "\0",
SignDate[1024] = "\0",
SignDateFormate[56] = "\0",
SignComment[56]="\0",
SignRelation[56]="\0",
comments[4096]="\0";
char person_value[1024] = "\0";
char person_value2[1024] = "\0";
tag_t memberTag = NULLTAG;
SIGNOFF_TYPE_t memberType;
EPM_signoff_decision_t dec;
tag_t aUserTag = NULLTAG, responsibleParty=NULLTAG, cur_perform_task=NULLTAG, *attachmentTags=NULLTAG;
tag_t root_task = NULLTAG, *taskAttches=NULLTAG, master_form_rel_type=NULLTAG,* form_list=NULLTAG;
tag_t type_tag = NULLTAG,*user_tags=NULLTAG;
int user_cnt=0;
char* timeinfo = NULL;
arg_cnt = TC_number_of_arguments(msg.arguments);
if (arg_cnt > 0)
{
for (int i = 0;i < arg_cnt;i++)
{
arg = TC_next_argument(msg.arguments);
ITKCALL2(ITK_ask_argument_named_value((const char*)arg, &argflag, &argvalue));
if (stricmp(argflag, "SignUserName") == 0) {
if (argvalue != NULL)
{
tc_strcpy(SignUserName, argvalue);
// WriteLog("-SignUserName=%s",Utf8ToGbk(SignUserName));
WriteLog("-SignUserName=%s",SignUserName);
}
}
if (stricmp(argflag, "SignDate") == 0) {
if (argvalue != NULL)
{
tc_strcpy(SignDate, argvalue);
WriteLog("-SignDate=%s", SignDate);
}
}
if (stricmp(argflag, "SignComment") == 0) {
if (argvalue != NULL)
{
tc_strcpy(SignComment, argvalue);
WriteLog("-SignComment=%s", SignComment);
}
}
if (stricmp(argflag, "SignRelation") == 0) {
if (argvalue != NULL)
{
tc_strcpy(SignRelation, argvalue);
WriteLog("-SignRelation=%s", SignRelation);
}
}
if (stricmp(argflag, "SignDateFormate") == 0) {
if (argvalue != NULL)
{
tc_strcpy(SignDateFormate, argvalue);
WriteLog("-SignDateFormate=%s", SignDateFormate);
}
}
MEM_free(argflag);
MEM_free(argvalue);
}
}
EPM_ask_root_task(msg.task, &root_task);
WSOM_ask_object_type2(msg.task, &task_type);
if (strcmp("EPMDoTask", task_type) == 0 || strcmp("EPMOrTask", task_type) == 0|| strcmp("EPMConditionTask", task_type) == 0) {
EPM_ask_responsible_party(msg.task, &responsibleParty);
POM_get_user(&userName, &aUserTag);
AOM_ask_value_string(aUserTag, "user_id", &user_id);
SA_ask_user_person_name2(aUserTag, &person_name);
tc_strcpy(person_value, person_name);
strcat(person_value, "#:#");
strcat(person_value, user_id);
AOM_ask_value_date(msg.task, "last_mod_date", &decision_date);
DATE_date_to_string(decision_date, SignDateFormate, &timeinfo);
}
else
{
EPM_ask_sub_task(msg.task, "perform-signoffs", &cur_perform_task);
EPM_ask_all_attachments(cur_perform_task, &attachments, &attachmentTags, &attach_type);
WriteLog("数量:%d\n", attachments);
if (attachments > 0) {
int start = 0;
for (int j = 0;j < attachments;j++) {
char* comment = NULL;
date_t decision_date_temp;
ITKCALL2(EPM_ask_signoff_decision(attachmentTags[j], &dec, &comment, &decision_date_temp));
ITKCALL2(EPM_ask_signoff_member(attachmentTags[j], &memberTag, &memberType));
if (memberType == SIGNOFF_GROUPMEMBER && dec == EPM_approve_decision) {
ITKCALL2(SA_ask_groupmember_user(memberTag, &aUserTag));
ITKCALL2(SA_ask_user_person_name2(aUserTag, &person_name));
ITKCALL2(AOM_ask_value_string(aUserTag, "user_id", &user_id));
if (start == 0) {
tc_strcpy(person_value, person_name);
strcat(person_value, "#:#");
strcat(person_value, user_id);
strcpy(comments, comment);
decision_date = decision_date_temp;
start = 1;
}
else {
strcat(person_value, ",");
strcat(person_value, person_name);
strcat(person_value, "#:#");
strcat(person_value, user_id);
strcat(comments, ",");
strcat(comments, comment);
char* timeinfo2 = NULL, * timeinfo3 = NULL;
ITKCALL2(DATE_date_to_string(decision_date, SignDateFormate, &timeinfo2));
ITKCALL2(DATE_date_to_string(decision_date_temp, SignDateFormate, &timeinfo3));
int year1, month1, day1;
int year2, month2, day2;
sscanf(timeinfo2, "%d-%d-%d", &year1, &month1, &day1);
sscanf(timeinfo3, "%d-%d-%d", &year2, &month2, &day2);
int tm1 = year1 * 10000 + month1 * 100 + day1;
int tm2 = year2 * 10000 + month2 * 100 + day2;
WriteLog("时间1:%d\n", tm1);
WriteLog("时间2:%d\n", tm2);
if (tm2 > tm1) {
decision_date = decision_date_temp;
}
}
}
/*
if (j == 0) {
strcpy(comments, comment);
decision_date = decision_date_temp;
}
else
{
strcat(comments, ",");
strcat(comments, comment);
char* timeinfo2 = NULL, * timeinfo3 = NULL;
ITKCALL2(DATE_date_to_string(decision_date, SignDateFormate, &timeinfo2));
ITKCALL2(DATE_date_to_string(decision_date_temp, SignDateFormate, &timeinfo3));
int year1, month1, day1;
int year2, month2, day2;
sscanf(timeinfo2, "%d-%d-%d", &year1, &month1, &day1);
sscanf(timeinfo3, "%d-%d-%d", &year2, &month2, &day2);
int tm1 = year1 * 10000 + month1 * 100 + day1;
int tm2 = year2 * 10000 + month2 * 100 + day2;
WriteLog("时间1:%d\n", tm1);
WriteLog("时间2:%d\n", tm2);
if (tm2 > tm1) {
decision_date = decision_date_temp;
}
}*/
}
}
}
EPM_ask_attachments(root_task, EPM_target_attachment, &occur_of_counts, &taskAttches);
GRM_find_relation_type(SignRelation, &master_form_rel_type);
POM_AM__set_application_bypass(true);
for (int count = 0; count < occur_of_counts; count++) {
char* object_string = NULL;
char* objectString = NULL;
char* version = NULL;
int num = 0;
tag_t* release_tags = NULLTAG;
tag_t owning_user = NULLTAG;
char* owner_name = NULL, * owner_id = NULL,*type = NULL;
AOM_ask_value_string(taskAttches[count], "object_string", &object_string);
// objectString = Utf8ToGbk(object_string);
objectString = object_string;
TCTYPE_ask_object_type(taskAttches[count], &type_tag);
TCTYPE_ask_class_name2(type_tag, &type_class);
WriteLog("流程中对象%s的类型%s\n", objectString, type_class);
if ((strstr(type_class, "XYSJ_D") != NULL) || ((strstr(type_class, "Revision") != NULL) || (strstr(type_class, "revision") != NULL))
&& (strstr(type_class, "Master") == NULL) && (strstr(type_class, "master") == NULL)
&& (strstr(type_class, "BOM") == NULL) && (strstr(type_class, "bom") == NULL) && (strstr(type_class, "Bom") == NULL))
{
//增加判断A版本之后 都按原来的签名信息签字
AOM_ask_value_string(taskAttches[count],"item_revision_id",&version);
ITKCALL2(AOM_ask_value_tags(taskAttches[count], "release_status_list", &num, &release_tags));
WriteLog("流程中对象%s的状态数量%d\n", objectString, num);
if (num > 0 || strcmp(version,"A") != 0) {
WriteLog("流程中对象%s的状态数量大于0或者不是A版本不再修改内容\n", objectString);
continue;
}
GRM_list_secondary_objects_only(taskAttches[count], master_form_rel_type, &form_count, &form_list);
WriteLog("流程中对象%s的签审表单数量%d\n", objectString, form_count);
if (form_count > 0) {
for (int z = 0; z < form_count; z++) {
AOM_ask_value_string(form_list[z],"object_type",&type);
WriteLog("object_type========%s\n", type);
if (strstr(type,"RevisionMaster") != NULL) {
WriteLog("11111111111111111111111111111\n");
WriteLog("属性:%s, 内容:%s\n", ISNULL(SignUserName), person_name);
ITKCALL2(DATE_date_to_string(decision_date, SignDateFormate, &timeinfo));
if (strcmp(ISNULL(timeinfo), "") != 0) {
WriteLog("时间属性:%s, 内容:%s\n", ISNULL(SignDate), timeinfo);
AOM_lock(form_list[z]);
WriteLog("1\n");
PROP_value_type_t propertyValueType;
WriteLog("2\n");
char* propertyType = NULL;
WriteLog("3\n");
ITKCALL2(AOM_ask_value_type(form_list[z], SignDate, &propertyValueType, &propertyType));
WriteLog("4\n");
if (propertyValueType == 2) {
WriteLog("5\n");
ITKCALL2(AOM_set_value_date(form_list[z], SignDate, decision_date));
WriteLog("6\n");
}
else
{
WriteLog("7\n");
ITKCALL2(AOM_set_value_string(form_list[z], SignDate, timeinfo));
WriteLog("8\n");
}
ITKCALL2(AOM_set_value_string(form_list[z], SignUserName, person_name));
WriteLog("9\n");
/*if (strcmp("", SignComment) != 0 && strcmp("", comments) != 0) {
WriteLog("10\n");
WriteLog("注释属性:%s, 内容:%s\n", ISNULL(SignComment), comments);
WriteLog("11\n");
ITKCALL2(AOM_set_value_string(form_list[z], SignComment, comments));
WriteLog("12\n");
}*/
WriteLog("13\n");
AOM_save(form_list[z]);
AOM_unlock(form_list[z]);
}
else
{
WriteLog("获取时间内容失败\n");
}
WriteLog("14\n");
}
WriteLog("15\n");
}
WriteLog("16\n");
}
WriteLog("17\n");
}
WriteLog("18\n");
//DOFREE(release_tags);
//DOFREE(object_string);
//DOFREE(objectString);
//DOFREE(owner_name);
//DOFREE(owner_id);
WriteLog("20\n");
}
POM_AM__set_application_bypass(false);
WriteLog("21\n");
/*DOFREE(log_file);
DOFREE(task_type);
DOFREE(userName);
DOFREE(person_name);
DOFREE(type_class);
DOFREE(attachmentTags);
DOFREE(taskAttches);
DOFREE(form_list);
DOFREE(timeinfo);*/
WriteLog("22\n");
WriteLog("*************************************************************\n");
WriteLog("* Connor_signoff_form is end ! *\n");
WriteLog("*************************************************************\n");
CloseLog();
return ifail;
}

@ -0,0 +1,30 @@
========================================================================
控制台应用程序XNY_itk 项目概述
========================================================================
应用程序向导已为您创建了此 XNY_itk 应用程序。
本文件概要介绍组成 XNY_itk 应用程序的每个文件的内容。
XNY_itk.vcxproj
这是使用应用程序向导生成的 VC++ 项目的主项目文件,其中包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
XNY_itk.vcxproj.filters
这是使用“应用程序向导”生成的 VC++ 项目筛选器文件。它包含有关项目文件与筛选器之间的关联信息。在 IDE 中,通过这种关联,在特定节点下以分组形式显示具有相似扩展名的文件。例如,“.cpp”文件与“源文件”筛选器关联。
XNY_itk.cpp
这是主应用程序源文件。
/////////////////////////////////////////////////////////////////////////////
其他标准文件:
StdAfx.h, StdAfx.cpp
这些文件用于生成名为 XNY_itk.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。
/////////////////////////////////////////////////////////////////////////////
其他注释:
应用程序向导使用“TODO:”注释来指示应添加或自定义的源代码部分。
/////////////////////////////////////////////////////////////////////////////

@ -0,0 +1,11 @@
// XNY_itk.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int main()
{
return 0;
}

@ -0,0 +1,194 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.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">
<ProjectGuid>{8240A4EB-EBA7-448B-B846-2FEC53074C73}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>SignOff_itk</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<ProjectName>SignOff_itk</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>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</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>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;IPLIB=none;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>C:\app\admin\product\12.1.0\dbhome_1\OCI\include;D:\TC12.4\include_cpp;D:\TC12.4\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\JKTC11\Siemens\Teamcenter\OTW11\OCI\lib\MSVC;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>D:\TC12.4\lib\*.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>libuser_exits.ar.lib</IgnoreSpecificDefaultLibraries>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32; NDEBUG; _CONSOLE; IPLIB=none ;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>
</SDLCheck>
<AdditionalIncludeDirectories>D:\source\锡压\SignOff_itk\curl\include;D:\WorkEnvironment\tc14ITK\include;D:\WorkEnvironment\tc14ITK\include_cpp;D:\WorkEnvironment\tc13ITK\oci\include;D:\WorkEnvironment\tc13ITK\oci\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>D:\WorkEnvironment\tc13ITK\lib;D:\work\tc13\OCI\lib\msvc;D:\WorkEnvironment\tc14ITK\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>D:\WorkEnvironment\tc14ITK\lib\*.lib;D:\WorkEnvironment\tc13ITK\lib\*.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>libuser_exits.ar.lib</IgnoreSpecificDefaultLibraries>
<OutputFile>$(OutDir)SignOff_itk.dll</OutputFile>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<UACUIAccess>true</UACUIAccess>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<Text Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="common_itk_util.h" />
<ClInclude Include="Connor2.h" />
<ClInclude Include="Connor_creo_dataset.h" />
<ClInclude Include="connor_util.h" />
<ClInclude Include="CRUL_server_call_httpserver.h" />
<ClInclude Include="curl.h" />
<ClInclude Include="epm_register_handler.h" />
<ClInclude Include="error_handling.h" />
<ClInclude Include="ocilib.h" />
<ClInclude Include="Supor_register.h" />
<ClInclude Include="string_helper.h" />
<ClInclude Include="string_utils.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="common_itk_util.c" />
<ClCompile Include="Connor2.cpp" />
<ClCompile Include="connor_util.cpp" />
<ClCompile Include="CRUL_server_call_httpserver.cpp" />
<ClCompile Include="epm_register_handler.cpp" />
<ClCompile Include="lcpdf.cpp" />
<ClCompile Include="lib_custom_main.cpp" />
<ClCompile Include="ocilib.cxx" />
<ClCompile Include="string_helper.cpp" />
<ClCompile Include="string_utils.cxx" />
<ClCompile Include="Connor_signoff_dataset.cpp" />
<ClCompile Include="Connor_signoff_form.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

@ -0,0 +1,102 @@
<?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;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>
<Filter Include="common">
<UniqueIdentifier>{2799e3e0-5454-43a6-a04a-5627cde49936}</UniqueIdentifier>
</Filter>
<Filter Include="epm_handler">
<UniqueIdentifier>{88c2de69-1cc0-4edb-a6ba-b56cb3ec6551}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<Text Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="epm_register_handler.h">
<Filter>epm_handler</Filter>
</ClInclude>
<ClInclude Include="error_handling.h">
<Filter>common</Filter>
</ClInclude>
<ClInclude Include="common_itk_util.h">
<Filter>common</Filter>
</ClInclude>
<ClInclude Include="connor_util.h">
<Filter>common</Filter>
</ClInclude>
<ClInclude Include="ocilib.h">
<Filter>common</Filter>
</ClInclude>
<ClInclude Include="string_helper.h">
<Filter>common</Filter>
</ClInclude>
<ClInclude Include="string_utils.h">
<Filter>common</Filter>
</ClInclude>
<ClInclude Include="Supor_register.h">
<Filter>epm_handler</Filter>
</ClInclude>
<ClInclude Include="CRUL_server_call_httpserver.h">
<Filter>common</Filter>
</ClInclude>
<ClInclude Include="Connor_creo_dataset.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="Connor2.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="curl.h">
<Filter>common</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="lib_custom_main.cpp">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="epm_register_handler.cpp">
<Filter>epm_handler</Filter>
</ClCompile>
<ClCompile Include="common_itk_util.c">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="connor_util.cpp">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="ocilib.cxx">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="string_helper.cpp">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="string_utils.cxx">
<Filter>common</Filter>
</ClCompile>
<ClCompile Include="CRUL_server_call_httpserver.cpp">
<Filter>epm_handler</Filter>
</ClCompile>
<ClCompile Include="Connor_signoff_dataset.cpp">
<Filter>epm_handler</Filter>
</ClCompile>
<ClCompile Include="Connor_signoff_form.cpp">
<Filter>epm_handler</Filter>
</ClCompile>
<ClCompile Include="lcpdf.cpp">
<Filter>epm_handler</Filter>
</ClCompile>
<ClCompile Include="Connor2.cpp">
<Filter>源文件</Filter>
</ClCompile>
</ItemGroup>
</Project>

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

@ -0,0 +1,50 @@
#include <vector>
#include <map>
#include <string>
#include <string.h>
#include <epm/epm.h>
#include <tccore/item_errors.h>
#include <ics/ics_enquiry.h>
#include <ict/ict_userservice.h>
#include <tccore/item_errors.h>
#include <bom/bom_msg.h>
#include <tccore/tc_msg.h>
#include <ics/ics.h>
#include <property/prop_msg.h>
#include <bom/bom_msg.h>
#include <tccore/item_msg.h>
#include <tccore/project.h>
#include<ae/ae.h>
#include "ocilib.h"
#include "common_itk_util.h"
#include "string_utils.h"
#include "error_handling.h"
#include "connor_util.h"
#include "CRUL_server_call_httpserver.h"
#define ITKCALL2( argument ) \
{ \
int retcode = argument; \
if ( retcode != ITK_ok ) { \
char* s; \
WriteLog( " "#argument "\n" ); \
WriteLog( " returns [%d]\n", retcode ); \
EMH_ask_error_text (retcode, &s); \
WriteLog( " Teamcenter ERROR: [%s]\n", s); \
WriteLog( " in file [" __FILE__ "], line [%d]\n\n", __LINE__ ); \
if (s != 0) MEM_free (s); \
} \
}
typedef struct
{
string name;
string value;
}CAD_ATTR_STRUCT;
int Connor_signoff_dataset(EPM_action_message_t msg);
int Connor_signoff_form(EPM_action_message_t msg);
int AddPdf(EPM_action_message_t msg);
int Connor_creo_dataset(EPM_action_message_t msg);
int Connor_setPDF_status(EPM_action_message_t msg);

@ -0,0 +1,471 @@
/**
* @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 "error_handling.h"
#include "common_itk_util.h"
#include "ocilib.h"
#include <wchar.h>
#include <string.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[4096];
va_list args;
va_start( args, format );
vsprintf( msg, format, args );
va_end( args );
printf( msg );
TC_write_syslog( msg );
}
FILE* logFile = NULL;
/*=============================================================================*
* 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 );
sprintf(date_string,"%4d%02d%02d",1900+p->tm_year,p->tm_mon+1 ,p->tm_mday);
//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);
sprintf(logFileName, "%s_%s.log", FunctionName, 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, "a");
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;
// }
//
// }
//
// }
//}
int SuporConnectionDB(){
char username[100]="\0",//数据库用户名
password[100]="\0",//数据库密码
sid[100]="\0"; //数据库链接
FILE* dbconfig = NULL;
char* tc_root_dir = getenv("tc_root");
char filePath[1024] = "";
tc_strcpy(filePath, tc_root_dir);
tc_strcat(filePath,"\\bin\\dbConfig.properties");
dbconfig = fopen(filePath, "r");
if(dbconfig==NULL){
WriteLog("%s该路径的配置文件读取失败请检查权限或是否存在\n", filePath);
}else
{
int line_num=0;
int data_count=0;
char **data_values=NULL;
char lineBuffer[1024]="";
while( fgets(lineBuffer, sizeof(lineBuffer), dbconfig) != NULL ){
line_num++;
EPM__parse_string(lineBuffer, "=", &data_count, &data_values);
if(line_num==1){
strcpy(username,data_values[1]);
// WriteLog("用户名:%s\n",username);
}
if(line_num==2){
strcpy(password,data_values[1]);
// WriteLog("密码:%s\n",password);
}
if(line_num==3){
strcpy(sid,data_values[1]);
// WriteLog("sid%s\n",sid);
}
}
DOFREE(data_values);
fclose(dbconfig);
// WriteLog("数据库连接配置内容:用户名:%s密码%s链接%s\n",username,password,sid);
if(ConnServer(username,password,sid) == -1)
{
WriteLog("连接数据库失败\n");
return -1;
}else
{
return 0;
}
}
return -1;
}
char* GbkToUtf8(const char* src_str)
{
int len = MultiByteToWideChar(CP_ACP, 0, src_str, -1, NULL, 0);
wchar_t* wstr = (wchar_t*)MEM_alloc((len + 1) * sizeof(wchar_t));
memset(wstr, 0, len + 1);
MultiByteToWideChar(CP_ACP, 0, src_str, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
char *str = (char*)MEM_alloc((len + 1) * sizeof(char));
memset(str, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
return str;
}
char* Utf8ToGbk(const char* src_str)
{
int len = MultiByteToWideChar(CP_UTF8, 0, src_str, -1, NULL, 0);
wchar_t* wszGBK = (wchar_t*)MEM_alloc((len + 1) * sizeof(wchar_t));
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, src_str, -1, wszGBK, len);
len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK = (char*)MEM_alloc((len + 1) * sizeof(char));
memset(szGBK, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, len, NULL, NULL);
return szGBK;
}
void starTime() {
time_t now;
struct tm* p;
time(&now);
p = localtime(&now);
WriteLog("start time %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);
}
/**
*
* ItemRevision
*
*/
logical checkIsItemRevision(tag_t objtag) {
tag_t type = NULLTAG;
tag_t item_type = NULLTAG;
logical isItems = false;
ITKCALL(TCTYPE_ask_object_type(objtag, &type));
ITKCALL(TCTYPE_find_type("ItemRevision", "", &item_type));
if (item_type != NULLTAG) {
logical isok = FALSE;
ITKCALL(TCTYPE_is_type_of(type, item_type, &isok));
if (isok) {
isItems = TRUE;
}
else {
isItems = FALSE;
}
}
return isItems;
}
/*******************************************************************
*
*
*
*@param file_content
*@param item_id id
*@param file_name
*
*******************************************************************/
int Supor_create_signinfo_file(char* file_content,char *item_id, char** file_name)
{
time_t now;
struct tm* p;
FILE* filePtr = NULL;
char temp_dir[MAX_PATH_LENGTH];
char local_path[MAX_PATH] = "";
char date_string[MAX_PATH_LENGTH];
memset(temp_dir, 0, sizeof(temp_dir));
memset(local_path, 0, sizeof(local_path));
sprintf(temp_dir, "%s", getenv("TEMP"));
printf("\n file dir: %s\n", temp_dir);
time(&now);
p = localtime(&now);
if (chdir(temp_dir) != ITK_ok)
{
memset(temp_dir, 0, sizeof(temp_dir));
sprintf(temp_dir, "%s", getenv("TC_LOG"));
printf("\n TC_USER_LOG_DIR invalide, log file dir: %s\n", temp_dir);
if (chdir(temp_dir) != ITK_ok)
{
printf("!*ERROR*!: Failed to change dir to TC_USER_LOG_DIR\n");
}
}
memset(date_string, 0, sizeof(date_string));
if (item_id != NULL) {
sprintf(date_string, "%s_%4d%02d%02d%02d%02d%02d.dat", item_id, 1900 + p->tm_year, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);
}
else
{
sprintf(date_string, "%4d%02d%02d%02d%02d%02d.dat", 1900 + p->tm_year, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);
}
printf("file name: %s\n", date_string);
filePtr = fopen(date_string, "w");
printf("create the temp dat file success!\n");
*file_name = (char*)MEM_alloc(sizeof(char) * 512);
sprintf(local_path, "%s\\%s", temp_dir, date_string);
strcpy((*file_name), local_path);
fprintf(filePtr, "%s", file_content);
//fwrite(file_content, sizeof(char), strlen(file_content), filePtr);
fclose(filePtr);
return ITK_ok;
}
/*******************************************************************
*
*
*
*@param file_content
*@param item_id id
*@param file_name
*
*******************************************************************/
int Supor_create_txt_file(char* FunctionName, char** file_name)
{
time_t now;
struct tm* p;
FILE* filePtr = NULL;
char temp_dir[MAX_PATH_LENGTH];
char local_path[MAX_PATH] = "";
char date_string[MAX_PATH_LENGTH];
memset(temp_dir, 0, sizeof(temp_dir));
memset(local_path, 0, sizeof(local_path));
sprintf(temp_dir, "%s", getenv("TEMP"));
printf("\n file dir: %s\n", temp_dir);
time(&now);
p = localtime(&now);
if (chdir(temp_dir) != ITK_ok)
{
memset(temp_dir, 0, sizeof(temp_dir));
sprintf(temp_dir, "%s", getenv("TC_LOG"));
printf("\n TC_USER_LOG_DIR invalide, log file dir: %s\n", temp_dir);
if (chdir(temp_dir) != ITK_ok)
{
printf("!*ERROR*!: Failed to change dir to TC_USER_LOG_DIR\n");
}
}
memset(date_string, 0, sizeof(date_string));
sprintf(date_string, "%s_%4d%02d%02d%02d%02d%02d.txt", FunctionName, 1900 + p->tm_year, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);
printf("file name: %s\n", date_string);
filePtr = fopen(date_string, "w");
printf("create the temp dat file success!\n");
*file_name = (char*)MEM_alloc(sizeof(char) * 512);
sprintf(local_path, "%s\\%s", temp_dir, date_string);
strcpy((*file_name), local_path);
//fwrite(file_content, sizeof(char), strlen(file_content), filePtr);
fclose(filePtr);
return ITK_ok;
}

@ -0,0 +1,76 @@
/**
* @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
#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//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 <Windows.h>
#include <stdlib.h>
//#include <io.h>
#include <stdio.h>
#include <time.h>
//#include <direct.h>
//#include <unistd.h>
#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 current_time( date_t * date_tag );
int SuporConnectionDB();
char* GbkToUtf8(const char* src_str);
char* Utf8ToGbk(const char* src_str);
void starTime();
logical checkIsItemRevision(tag_t objtag);
int Supor_create_signinfo_file(char* file_content,char *item_id, char** file_name);
int Supor_create_txt_file(char* FunctionName, char** file_name);
#ifdef __cplusplus
}
#endif
#endif

@ -0,0 +1,993 @@
#include "connor_util.h"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
#include <server_exits/user_server_exits.h>
extern "C" int POM_AM__set_application_bypass(logical bypass);
/**
*
*objtag
*type_name
*/
int checkIsTypeOrSubtype(tag_t objtag, char* type_name) {
printf("判断是否是%s及其子类\n", type_name);
tag_t type = NULLTAG;
ITKCALL(TCTYPE_ask_object_type(objtag, &type));
tag_t item_type = NULLTAG;
ITKCALL(TCTYPE_find_type(type_name, "", &item_type));
int is_type = 0;
if (item_type != NULLTAG) {
printf("找到%s类\n", type_name);
//printf(" find Folder type ok !!!! \n");
logical isok = FALSE;
ITKCALL(TCTYPE_is_type_of(type, item_type, &isok));
if (isok) {
printf("是%s类及其子类\n\n", type_name);
is_type = 1;
}
else {
printf("不是%s类及其子类\n\n", type_name);
is_type = 0;
}
}
else {
printf("没有找到%s类\n\n", type_name);
}
return is_type;
}
int Supor_open_bypass(void* returnValue)
{
POM_AM__set_application_bypass(true);
return 0;
}
int Supor_close_bypass(void* returnValue)
{
POM_AM__set_application_bypass(false);
return 0;
}
int ITK_server_bypass(void* returnValue)
{
int status = ITK_ok;
char* setBypass = false;
logical byPassStatus = false;
ITKCALL(status = USERARG_get_string_argument(&setBypass));
if (strcmp(setBypass, "true") == 0) {
byPassStatus = true;
}
POM_AM__set_application_bypass(setBypass);
return 0;
}
int Supor_add_release_status(void* return_data) {
int ifail = ITK_ok;
char* client_string = NULL, * client_string2 = NULL;
ITKCALL(ifail = USERARG_get_string_argument(&client_string));
ITKCALL(ifail = USERARG_get_string_argument(&client_string2));
printf(("添加发布状态 %s 到UID = %s \n", client_string2, client_string));
tag_t dataset_tag = NULLTAG;
tag_t release_stat = NULLTAG;
char* flag = NULL;
ITKCALL(ifail = POM_string_to_tag(client_string, &dataset_tag));
if (dataset_tag == NULLTAG) {
flag = "false";
}
else {
ITKCALL(ifail = RELSTAT_create_release_status(client_string2, &release_stat));
if (ifail == ITK_ok) {
ITKCALL(ifail = RELSTAT_add_release_status(release_stat, 1, &dataset_tag, true));
if (ifail == ITK_ok) {
printf(("添加发布状态成功\n"));
flag = "true";
}
else {
flag = "false";
}
}
else {
flag = "false";
}
}
MEM_free(client_string);
MEM_free(client_string2);
char server_string[10];
strcpy(server_string, flag);
*((char**)return_data) =
(char*)MEM_alloc((strlen(server_string) + 1) * sizeof(char));
strcpy(*((char**)return_data), server_string);
return ITK_ok;
}
int LB_getBomChildren(void* return_data) {
int ifail = ITK_ok;
char* client_string = NULL;
tag_t rev_tag = NULLTAG, bom_window_tag=NULLTAG, topLine=NULLTAG,* c_line_tags=NULLTAG, chirev=NULLTAG;
int c_line_count = 0;
string uids;
ITKCALL(ifail = USERARG_get_string_argument(&client_string));
ITKCALL(ifail = POM_string_to_tag(client_string, &rev_tag));
ITKCALL(BOM_create_window(&bom_window_tag));//创建window视图
ITKCALL(BOM_set_window_top_line(bom_window_tag, NULLTAG, rev_tag, NULLTAG, &topLine));
ITKCALL(BOM_line_ask_all_child_lines(topLine, &c_line_count, &c_line_tags));
for (int c = 0;c < c_line_count;c++) {
char* tempValue = NULL;
ITKCALL(AOM_ask_value_tag(c_line_tags[c], "bl_line_object", &chirev));
ITK__convert_tag_to_uid(chirev, &tempValue);
uids.append(tempValue).append("##");
DOFREE(tempValue);
}
ITKCALL(BOM_close_window(bom_window_tag));
DOFREE(client_string);
DOFREE(c_line_tags);
*((char**)return_data) =
(char*)MEM_alloc((uids.length() + 1) * sizeof(char));
strcpy(*((char**)return_data), uids.c_str());
return ITK_ok;
}
bool compareDate(date_t date1, date_t date2)
{
char* time1=NULL, * time2=NULL;
ITKCALL(DATE_date_to_string(date1, "%Y-%m-%d %H:%M:%S", &time1));
ITKCALL(DATE_date_to_string(date2, "%Y-%m-%d %H:%M:%S", &time2));
int year1, month1, day1, hour1, min1, sec1;
int year2, month2, day2, hour2, min2, sec2;
sscanf(time1, "%d-%d-%d %d:%d:%d", &year1, &month1, &day1, &hour1, &min1, &sec1);
sscanf(time2, "%d-%d-%d %d:%d:%d", &year2, &month2, &day2, &hour2, &min2, &sec2);
int tm1 = year1 * 10000 + month1 * 100 + day1;
int tm2 = year2 * 10000 + month2 * 100 + day2;
if (tm1 != tm2) return (tm1 > tm2) ? true : false;//如果不相等大返回1小返回0
tm1 = hour1 * 3600 + min1 * 60 + sec1;
tm2 = hour2 * 3600 + min2 * 60 + sec2;//将时分秒转换为秒数
if (tm1 != tm2) return (tm1 > tm2) ? true : false;//如果不相等大返回1小返回0
return true;//到这里必然是相等了
}
bool cmp(const pair<tag_t, int>& a, const pair<tag_t, int>& b) {
if (a.second < b.second) return true;
else return false;
}
//map插入数据时就是有序的
int getLasterDataset(tag_t rev_tag,tag_t relation,string object_type,string keyName, map<string, tag_t> &uidMap) {
tag_t* sp_tags = NULLTAG;
int sp_count = 0;
AOM_refresh(rev_tag, false);
ITKCALL(GRM_list_secondary_objects_only(rev_tag, relation, &sp_count, &sp_tags));
for (int s = 0;s < sp_count;s++) {
char* objectType = NULL, * objectName = NULL;
AOM_refresh(sp_tags[s], false);
AOM_ask_value_string(sp_tags[s], "object_type", &objectType);
AOM_ask_value_string(sp_tags[s], "object_name", &objectName);
string objectName_str(objectName);
if (object_type.length() > 0) {
WriteLog("文件类型:%s\n", objectType);
WriteLog("要求类型:%s\n", object_type.c_str());
if (strcmp(objectType, object_type.c_str())==0) {
WriteLog("一致\n");
char* tag_uid = NULL;
if (keyName.length() > 0) {
if (objectName_str.find(keyName)!= std::string::npos) {
if (uidMap.find(objectName_str) != uidMap.end()) {
date_t date1,date2;
AOM_ask_value_date(sp_tags[s], "creation_date", &date1);
AOM_ask_value_date(uidMap[objectName_str], "creation_date", &date2);
if (compareDate(date1, date2)) {
uidMap[objectName_str] = sp_tags[s];
}
}
else
{
uidMap[objectName_str] = sp_tags[s];
}
}
}
else
{
if (uidMap.find(objectName_str) != uidMap.end()) {
date_t date1, date2;
AOM_ask_value_date(sp_tags[s], "creation_date", &date1);
AOM_ask_value_date(uidMap[objectName_str], "creation_date", &date2);
if (compareDate(date1, date2)) {
uidMap[objectName_str] = sp_tags[s];
}
}
else
{
uidMap[objectName_str] = sp_tags[s];
}
}
}
}
else
{
if (uidMap.find(objectName_str) != uidMap.end()) {
date_t date1, date2;
AOM_ask_value_date(sp_tags[s], "creation_date", &date1);
AOM_ask_value_date(uidMap[objectName_str], "creation_date", &date2);
if (compareDate(date1, date2)) {
uidMap[objectName_str] = sp_tags[s];
}
}
else
{
uidMap[objectName_str] = sp_tags[s];
}
}
DOFREE(objectType);
DOFREE(objectName);
}
DOFREE(sp_tags);
return 0;
}
int LB_getMJbg(void* return_data) {
int ifail = ITK_ok;
char* client_string = NULL;
tag_t rev_tag = NULLTAG, sp_relation = NULLTAG, bgh_relation=NULL,* grmSecondTags=NULLTAG, pdf_relation = NULLTAG;
int grmSecondCount = 0;
char* log_file = NULL;
CreateLogFile("LB_getMJbg", &log_file);
WriteLog("*************************************************************\n");
WriteLog("* LB_getMJbg is strat ! *\n");
WriteLog("*************************************************************\n");
starTime();
ITKCALL(ifail = USERARG_get_string_argument(&client_string));
WriteLog("传入uid:%s\n", client_string);
ITKCALL(ifail = POM_string_to_tag(client_string, &rev_tag));
AOM_refresh(rev_tag, false);
ITKCALL(GRM_find_relation_type("LB2_BGH", &bgh_relation));
ITKCALL(GRM_find_relation_type("IMAN_specification", &sp_relation));
ITKCALL(GRM_find_relation_type("LB2_PDF", &pdf_relation));
ITKCALL(GRM_list_secondary_objects_only(rev_tag, bgh_relation, &grmSecondCount, &grmSecondTags));
string uids;
map<string, tag_t> mjMap;
for (int i = 0;i < grmSecondCount;i++) {
char* object_type = NULL;
AOM_ask_value_string(grmSecondTags[i], "object_type", &object_type);
if (strcmp("LB2_MJRevision", object_type) == 0) {
int mjcnt = 0,pdfcnt=0;
tag_t *mj_tags = NULLTAG,*pdf_tags=NULLTAG;
ITKCALL(GRM_list_secondary_objects_only(grmSecondTags[i], sp_relation, &mjcnt, &mj_tags));
vector<tag_t> dwg_vec;
for (int j = 0;j < mjcnt;j++) {
char* object_type2 = NULL;
AOM_ask_value_string(mj_tags[j], "object_type", &object_type2);
if (strcmp("LB2_CAD", object_type2) == 0) {
int status_cnt = 0;
tag_t* dwg_status = NULLTAG;
ITKCALL(AOM_ask_value_tags(mj_tags[j], "release_status_list", &status_cnt, &dwg_status));
// *
if (status_cnt == 0) {
WriteLog("状态为空\n");
dwg_vec.push_back(mj_tags[j]);
}
else{
char *dwg_status_name2 = NULL;
AOM_ask_value_string(dwg_status[status_cnt - 1], "object_name", &dwg_status_name2);
WriteLog("表面状态:%s\n", dwg_status_name2);
char *dwg_status_name = NULL;
RELSTAT_ask_release_status_type(dwg_status[status_cnt - 1], &dwg_status_name);
WriteLog("状态:%s\n", dwg_status_name);
if ((strcmp("TCM Released", dwg_status_name) != 0)) {
dwg_vec.push_back(mj_tags[j]);
}
DOFREE(dwg_status_name);
}
DOFREE(dwg_status);
}
DOFREE(object_type2);
}
ITKCALL(GRM_list_secondary_objects_only(grmSecondTags[i], pdf_relation, &pdfcnt, &pdf_tags));
for (int j = 0;j < pdfcnt;j++) {
char* object_type2 = NULL;
AOM_ask_value_string(pdf_tags[j], "object_type", &object_type2);
if (strcmp("PDF", object_type2) == 0) {
char* object_name2 = NULL;
AOM_ask_value_string(pdf_tags[j], "object_name", &object_name2);
string pdfName(object_name2);
pdfName = pdfName.substr(0, pdfName.find(".pdf"));
WriteLog("PDF文件名:%s\n", pdfName.c_str());
for (int d = 0;d < dwg_vec.size();d++){
char* object_name = NULL;
AOM_ask_value_string(dwg_vec[d], "object_name", &object_name);
if (strstr(object_name, pdfName.c_str()) != NULL) {
mjMap[pdfName.c_str()] = pdf_tags[j];
}
DOFREE(object_name);
}
DOFREE(object_name2);
}
DOFREE(object_type2);
}
DOFREE(mj_tags);
DOFREE(pdf_tags);
}
DOFREE(object_type);
}
for (auto it = mjMap.begin();it != mjMap.end();it++) {
char* tag_uid = NULL;
ITK__convert_tag_to_uid(it->second, &tag_uid);
uids.append(tag_uid).append("##");
DOFREE(tag_uid);
}
WriteLog("传出uid:%s\n", uids.c_str());
*((char**)return_data) =
(char*)MEM_alloc((uids.length() + 1) * sizeof(char));
strcpy(*((char**)return_data), uids.c_str());
mjMap.clear();
map<string, tag_t>().swap(mjMap);
WriteLog("*************************************************************\n");
WriteLog("* LB_getMJbg is end ! *\n");
WriteLog("*************************************************************\n");
CloseLog();
DOFREE(grmSecondTags);
DOFREE(client_string);
DOFREE(log_file);
return ITK_ok;
}
int LB_getMJ(void* return_data) {
int ifail = ITK_ok;
char* client_string = NULL;
tag_t rev_tag = NULLTAG, sp_relation=NULLTAG;
char* log_file = NULL;
CreateLogFile("LB_getMJ", &log_file);
WriteLog("*************************************************************\n");
WriteLog("* LB_getMJ is strat ! *\n");
WriteLog("*************************************************************\n");
starTime();
ITKCALL(ifail = USERARG_get_string_argument(&client_string));
WriteLog("传入uid:%s\n", client_string);
ITKCALL(ifail = POM_string_to_tag(client_string, &rev_tag));
AOM_refresh(rev_tag, false);
ITKCALL(GRM_find_relation_type("LB2_PDF", &sp_relation));
map<string, tag_t> mjMap;
string uids;
getLasterDataset(rev_tag, sp_relation, "PDF", "", mjMap);
for (auto it = mjMap.begin();it != mjMap.end();it++) {
char* tag_uid = NULL;
ITK__convert_tag_to_uid(it->second, &tag_uid);
uids.append(tag_uid).append("##");
DOFREE(tag_uid);
}
*((char**)return_data) =
(char*)MEM_alloc((uids.length() + 1) * sizeof(char));
strcpy(*((char**)return_data), uids.c_str());
mjMap.clear();
map<string, tag_t>().swap(mjMap);
WriteLog("*************************************************************\n");
WriteLog("* LB_getMJ is end ! *\n");
WriteLog("*************************************************************\n");
CloseLog();
DOFREE(client_string);
DOFREE(log_file);
return ITK_ok;
}
int LB_getGybg(void* return_data) {
int ifail = ITK_ok;
char* client_string = NULL;
tag_t rev_tag = NULLTAG, fm_relation = NULLTAG, *lb2_gywj = NULLTAG, * form_list = NULLTAG;
tag_t query_tag=NULLTAG, *results=NULLTAG;
int form_count = 0, count_lb2_gywj=0, entry_count=0, num_found=0;
char** entries, ** values;
vector<string> uidVec;
string uids;
char* log_file = NULL;
CreateLogFile("LB_getGybg", &log_file);
WriteLog("*************************************************************\n");
WriteLog("* LB_getGybg is strat ! *\n");
WriteLog("*************************************************************\n");
starTime();
ITKCALL(ifail = USERARG_get_string_argument(&client_string));
WriteLog("传入uid:%s\n", client_string);
ITKCALL(ifail = POM_string_to_tag(client_string, &rev_tag));
AOM_refresh(rev_tag, false);
AOM_ask_value_tags(rev_tag, "IMAN_master_form_rev", &form_count, &form_list);
char* query_name = "工序卡片搜索";
ITKCALL(QRY_find2(query_name, &query_tag));
ITKCALL(QRY_find_user_entries(query_tag, &entry_count, &entries, &values));
char* other_values[1], * other_entrys[1];
other_values[0] = (char*)calloc(64, sizeof(char));
other_entrys[0] = (char*)calloc(64, sizeof(char));
WriteLog("表单数量:%d\n", form_count);
if (form_count > 0) {
ITKCALL(AOM_ask_value_tags(form_list[0], "lb2_gywj", &count_lb2_gywj, &lb2_gywj));
WriteLog("表格内容数量:%d\n", count_lb2_gywj);
for (int i = 0;i < count_lb2_gywj;i++) {
char* lb2_gxkbh = NULL;
// *
ITKCALL(AOM_ask_value_string(lb2_gywj[i], "lb2_gxkbh", &lb2_gxkbh));
if (strcmp("", ISNULL(lb2_gxkbh)) != 0) {
for (int n = 0; n < entry_count; n++)
{
WriteLog("查询条件:%s\n", ISNULL(entries[n]));
if (tc_strcmp(entries[n], "gxkbh") == 0) {
tc_strcpy(other_entrys[0], "gxkbh");
tc_strcpy(other_values[0], ISNULL(lb2_gxkbh));
tc_strcat(other_values[0], "*");
WriteLog("工序卡片编号:%s\n", ISNULL(other_values[0]));
}
}
ITKCALL(QRY_execute(query_tag, 1, other_entrys, other_values, &num_found, &results));
date_t date1;
tag_t lastTag = NULLTAG;
WriteLog("搜索结果:%d\n", num_found);
for (int r = 0;r < num_found;r++) {
date_t date2;
AOM_ask_value_date(results[r], "creation_date", &date2);
if (r == 0) {
date1 = date2;
lastTag = results[r];
}
else {
if (compareDate(date2, date1)) {
date1 = date2;
lastTag = results[r];
}
}
}
if (lastTag != NULLTAG) {
char* tag_uid = NULL;
ITK__convert_tag_to_uid(lastTag, &tag_uid);
uidVec.push_back(tag_uid);
DOFREE(tag_uid);
}
}
DOFREE(lb2_gxkbh);
}
}
WriteLog("所有PDF数量:%d\n", uidVec.size());
for (int v = 0;v < uidVec.size();v++) {
uids.append(uidVec[v]).append("##");
}
*((char**)return_data) =
(char*)MEM_alloc((uids.length() + 1) * sizeof(char));
strcpy(*((char**)return_data), uids.c_str());
WriteLog("*************************************************************\n");
WriteLog("* LB_getGybg is end ! *\n");
WriteLog("*************************************************************\n");
CloseLog();
DOFREE(lb2_gywj);
DOFREE(form_list);
DOFREE(results);
DOFREE(log_file);
DOFREE(client_string);
return ITK_ok;
}
int LB_getGylx(void* return_data) {
int ifail = ITK_ok;
char* client_string = NULL, *lb2_lbjth=NULL;
tag_t rev_tag = NULLTAG, relation = NULLTAG, sp_relation=NULLTAG, fm_relation=NULLTAG,* grmSecondTags = NULLTAG, chirev = NULLTAG,*form_list=NULLTAG;
tag_t bom_window_tag=NULLTAG;
int grmSecondCount = 0, form_count=0;
vector<string> uidVec;
string uids;
char* log_file = NULL;
CreateLogFile("LB_getGylx", &log_file);
WriteLog("*************************************************************\n");
WriteLog("* LB_getGylx is strat ! *\n");
WriteLog("*************************************************************\n");
starTime();
ITKCALL(ifail = USERARG_get_string_argument(&client_string));
WriteLog("传入uid:%s\n", client_string);
ITKCALL(ifail = POM_string_to_tag(client_string, &rev_tag));
AOM_refresh(rev_tag, false);
ITKCALL(GRM_find_relation_type("LB2_FMWJ", &fm_relation));
ITKCALL(GRM_find_relation_type("IMAN_specification", &sp_relation));
map<string, tag_t> fmMap; //封面
map<string, tag_t> mlMap; //目录
map<string, tag_t> lctMap; //流程图
map<string, tag_t> mxbMap; //明细表
getLasterDataset(rev_tag, fm_relation,"PDF","封面",fmMap);
getLasterDataset(rev_tag, fm_relation, "PDF", "目录", mlMap);
getLasterDataset(rev_tag, fm_relation, "PDF", "流程图", lctMap);
getLasterDataset(rev_tag, fm_relation, "PDF", "明细表", mxbMap);
WriteLog("封面数量:%d\n", fmMap.size());
for (auto it = fmMap.begin();it != fmMap.end();it++) {
char* tag_uid = NULL;
ITK__convert_tag_to_uid(it->second, &tag_uid);
uidVec.push_back(tag_uid);
DOFREE(tag_uid);
}
WriteLog("目录数量:%d\n", mlMap.size());
for (auto it = mlMap.begin();it != mlMap.end();it++) {
char* tag_uid = NULL;
ITK__convert_tag_to_uid(it->second, &tag_uid);
uidVec.push_back(tag_uid);
DOFREE(tag_uid);
}
WriteLog("流程图数量:%d\n", lctMap.size());
for (auto it = lctMap.begin();it != lctMap.end();it++) {
char* tag_uid = NULL;
ITK__convert_tag_to_uid(it->second, &tag_uid);
uidVec.push_back(tag_uid);
DOFREE(tag_uid);
}
WriteLog("明细表数量:%d\n", mxbMap.size());
for (auto it = mxbMap.begin();it != mxbMap.end();it++) {
char* tag_uid = NULL;
ITK__convert_tag_to_uid(it->second, &tag_uid);
uidVec.push_back(tag_uid);
DOFREE(tag_uid);
}
ITKCALL(GRM_find_relation_type("LB2_GYGCGL", &relation));
ITKCALL(GRM_list_secondary_objects_only(rev_tag, relation, &grmSecondCount, &grmSecondTags));
map<tag_t, int> uidMap;
vector<tag_t> gylx_sp;
for (int c = 0;c < grmSecondCount;c++) {
ITEM_ask_latest_rev(grmSecondTags[c], &chirev);
AOM_refresh(chirev, false);
AOM_ask_value_tags(chirev, "IMAN_master_form_rev", &form_count, &form_list);
if (form_count > 0) {
ITKCALL(AOM_ask_value_string(form_list[0], "lb2_gygckbh", &lb2_lbjth));
int data_count = 0;
char** data_values = NULL;
EPM__parse_string(ISNULL(lb2_lbjth), "-", &data_count, &data_values);
if (data_count > 2) {
uidMap[chirev] = atoi(data_values[2]);
}
else
{
gylx_sp.push_back(chirev);
}
}
}
WriteLog("工艺路线数量:%d\n", uidMap.size()+ gylx_sp.size());
vector<pair<tag_t, int>> vpi(uidMap.begin(), uidMap.end());
sort(vpi.begin(), vpi.end(), cmp);
ITKCALL(BOM_create_window(&bom_window_tag));//创建window视图
for (int g = 0;g < gylx_sp.size();g++) {
tag_t topLine = NULLTAG, * c_line_tags = NULLTAG;
int c_line_count = 0;
map<string, tag_t> gylxMap;
getLasterDataset(gylx_sp[g], sp_relation, "PDF", "", gylxMap);
WriteLog("工艺路线下PDF数量:%d\n", gylxMap.size());
for (auto it = gylxMap.begin();it != gylxMap.end();it++) {
char* tag_uid = NULL;
ITK__convert_tag_to_uid(it->second, &tag_uid);
uidVec.push_back(tag_uid);
DOFREE(tag_uid);
}
gylxMap.clear();
map<string, tag_t>().swap(gylxMap);
ITKCALL(BOM_set_window_top_line(bom_window_tag, NULLTAG, gylx_sp[g], NULLTAG, &topLine));
ITKCALL(BOM_line_ask_all_child_lines(topLine, &c_line_count, &c_line_tags));
for (int c = 0;c < c_line_count;c++) {
tag_t gx_tag = NULLTAG;
ITKCALL(AOM_ask_value_tag(c_line_tags[c], "bl_line_object", &gx_tag));
AOM_refresh(gx_tag, false);
map<string, tag_t> gxMap;
// *
//tag_t* rev_fs = NULL;
//int num_f = 0;
//AOM_ask_value_tags(gx_tag, "IMAN_master_form_rev", &num_f, &rev_fs);
//if (num_f != 0) {
// char* lb2_sfty = NULL;
// AOM_ask_value_string(rev_fs[0], "lb2_sfty", &lb2_sfty);
// if (strcmp(lb2_sfty,"是") == 0 || strcmp(lb2_sfty, "1") == 0) {
// continue;
// }
//}
getLasterDataset(gx_tag, sp_relation, "PDF", "", gxMap);
WriteLog("工序下PDF数量:%d\n", gxMap.size());
for (auto it = gxMap.begin();it != gxMap.end();it++) {
char* tag_uid = NULL;
ITK__convert_tag_to_uid(it->second, &tag_uid);
uidVec.push_back(tag_uid);
DOFREE(tag_uid);
}
gxMap.clear();
map<string, tag_t>().swap(gxMap);
}
DOFREE(c_line_tags);
}
for (auto item : vpi) {
tag_t gylx_tag = item.first;
tag_t topLine = NULLTAG,* c_line_tags=NULLTAG;
int c_line_count = 0;
map<string, tag_t> gylxMap;
getLasterDataset(gylx_tag, sp_relation, "PDF", "", gylxMap);
WriteLog("工艺路线下PDF数量:%d\n", gylxMap.size());
for (auto it = gylxMap.begin();it != gylxMap.end();it++) {
char* tag_uid = NULL;
ITK__convert_tag_to_uid(it->second, &tag_uid);
uidVec.push_back(tag_uid);
DOFREE(tag_uid);
}
gylxMap.clear();
map<string, tag_t>().swap(gylxMap);
ITKCALL(BOM_set_window_top_line(bom_window_tag, NULLTAG, gylx_tag, NULLTAG, &topLine));
ITKCALL(BOM_line_ask_all_child_lines(topLine, &c_line_count, &c_line_tags));
for (int c = 0;c < c_line_count;c++) {
tag_t gx_tag=NULLTAG;
ITKCALL(AOM_ask_value_tag(c_line_tags[c], "bl_line_object", &gx_tag));
AOM_refresh(gx_tag, false);
map<string, tag_t> gxMap;
// *
tag_t* rev_fs = NULL;
int num_f = 0;
AOM_ask_value_tags(gx_tag, "IMAN_master_form_rev", &num_f, &rev_fs);
if (num_f != 0) {
char* lb2_sfty = NULL;
AOM_ask_value_string(rev_fs[0], "lb2_sfty", &lb2_sfty);
if (strcmp(lb2_sfty,"") == 0 || strcmp(lb2_sfty, "1") == 0) {
continue;
}
}
getLasterDataset(gx_tag, sp_relation, "PDF", "", gxMap);
WriteLog("工序下PDF数量:%d\n", gxMap.size());
for (auto it = gxMap.begin();it != gxMap.end();it++) {
char* tag_uid = NULL;
ITK__convert_tag_to_uid(it->second, &tag_uid);
uidVec.push_back(tag_uid);
DOFREE(tag_uid);
}
gxMap.clear();
map<string, tag_t>().swap(gxMap);
}
DOFREE(c_line_tags);
}
ITKCALL(BOM_close_window(bom_window_tag));
WriteLog("所有PDF数量:%d\n", uidVec.size());
for (int v = 0;v < uidVec.size();v++) {
uids.append(uidVec[v]).append("##");
}
*((char**)return_data) =
(char*)MEM_alloc((uids.length() + 1) * sizeof(char));
strcpy(*((char**)return_data), uids.c_str());
fmMap.clear();
map<string, tag_t>().swap(fmMap);
mlMap.clear();
map<string, tag_t>().swap(mlMap);
lctMap.clear();
map<string, tag_t>().swap(lctMap);
mxbMap.clear();
map<string, tag_t>().swap(mxbMap);
uidMap.clear();
map<tag_t, int>().swap(uidMap);
vpi.clear();
vector<pair<tag_t, int>>().swap(vpi);
WriteLog("*************************************************************\n");
WriteLog("* LB_getGylx is end ! *\n");
WriteLog("*************************************************************\n");
CloseLog();
DOFREE(client_string);
DOFREE(grmSecondTags);
DOFREE(lb2_lbjth);
DOFREE(form_list);
DOFREE(log_file);
return ITK_ok;
}
int checkIsInType(tag_t objtag, string parentType) {
tag_t type = NULLTAG;
tag_t item_type = NULLTAG;
ITKCALL(TCTYPE_ask_object_type(objtag, &type));
ITKCALL(TCTYPE_find_type(parentType.c_str(), "", &item_type));
if (item_type != NULLTAG) {
logical isok = FALSE;
ITKCALL(TCTYPE_is_type_of(type, item_type, &isok));
if (isok) {
return 1;
}
else {
return 0;
}
}
return 0;
}
//递归bom 判断子是否发布
boolean getchibomline_isrelease(tag_t top_line_tag, char* err) {
int m = 0, status_count = 0,
rev_form_cnt = 0,
c_line_count = 0,
tuzhi_col = 0;
tag_t bom_window_tag = NULLTAG,
* c_line_tags = NULL,
* rev_form_tags = NULL,
* tuzhi_tags = NULL;
printf("nnnn\n");
ITKCALL(BOM_line_ask_all_child_lines(top_line_tag, &c_line_count, &c_line_tags));
printf("c_line_count=%d\n" + c_line_count);
if (c_line_count == 0) {
printf("下面没有BOM结构\n");
}
else {
for (int m = 0; m < c_line_count; m++)
{
tag_t rev_tag = NULLTAG;
char* name = "\0";
ITKCALL(AOM_ask_value_tag(c_line_tags[m], "bl_line_object", &rev_tag));//获取BOMLINE关联的版本
ITKCALL(AOM_ask_value_string(rev_tag, "object_string", &name));
int wl_release_count = 0;
tag_t* wl_release_tags = NULL;
ITKCALL(AOM_ask_value_tags(rev_tag, "release_status_list", &wl_release_count, &wl_release_tags));
if (wl_release_count > 0)
{
printf("版本已发布\n");
}
else {
printf("版本未发布\n");
strcat(err, "[");
strcat(err, name);
strcat(err, "]");
}
getchibomline_isrelease(c_line_tags[m], err);
}
}
return true;
}
//判断子件是否发布
int BOM_CHI_ISRELEASE(EPM_rule_message_t msg) {
printf("===================================\n");
printf("根据BOM子件是否发布,限制流程发起 开始\n");
printf("===================================\n");
int ifail = EPM_go, att_cnt = 0;
tag_t task_tag = NULL_TAG,
root_task_tag = NULLTAG,
* attachments;;
task_tag = msg.task;
char errs[2500] = "\0";
char err[2000] = "\0";
if (task_tag == NULLTAG)
{
return EPM_nogo;
}
EPM_ask_root_task(task_tag, &root_task_tag);
EPM_ask_attachments(root_task_tag, EPM_target_attachment, &att_cnt, &attachments);
if (att_cnt <= 0) {
printf("目标为空 退出\n");
return EPM_go;
}
else {
POM_AM__set_application_bypass(true);
for (int i = 0; i < att_cnt; i++)
{
tag_t tagt = NULLTAG;
char* name = NULL;
int form_c = 0;
tagt = attachments[i];//
if (checkIsTypeOrSubtype(tagt, "PSBOMViewRevision") != 1)
{
printf("类型不是PSBOMViewRevision\n");
continue;
}
printf("类型是PSBOMViewRevision,继续\n");
ITKCALL(AOM_ask_value_string(tagt, "object_string", &name));
int m = 0, c_line_count = 0;
tag_t bom_window_tag = NULLTAG,
top_line_tag = NULLTAG,
* c_line_tags;
ITKCALL(BOM_create_window(&bom_window_tag));//创建window视图
ITKCALL(BOM_set_window_top_line_bvr(bom_window_tag, tagt, &top_line_tag));//获取顶层bomline
ITKCALL(BOM_line_ask_all_child_lines(top_line_tag, &c_line_count, &c_line_tags));
if (c_line_count == 0) {
printf("没有BOM结构\n");
}
else {
getchibomline_isrelease(top_line_tag, err);
if (strcmp(err, "") != 0)
{
sprintf(errs, "存在BOM对象%s子件%s未发布!!", name, err);
EMH_store_error_s1(EMH_severity_information, 278701, errs);//错误弹窗
ifail = EPM_nogo;
}
}
ITKCALL(BOM_close_window(bom_window_tag));
if (name != NULL) {
MEM_free(name);
name = NULL;
}
}
POM_AM__set_application_bypass(false);
}
printf("ifail:%d\n", ifail);
printf("===================================\n");
printf("根据BOM子件是否发布,限制流程发起 结束\n");
printf("===================================\n");
return ifail;
}
int checkIsTypeOrSubtype(tag_t objtag, const char* type_name) {
//printf("判断是否是%s及其子类\n",type_name);
tag_t type = NULLTAG;
ITKCALL(TCTYPE_ask_object_type(objtag, &type));//获得类型
tag_t item_type = NULLTAG;
ITKCALL(TCTYPE_find_type(type_name, "", &item_type));//获得所有类型为type_name的对象
int is_type = 0;
if (item_type != NULLTAG) {
//printf("找到%s类\n",type_name);
//printf(" find Folder type ok !!!! \n");
logical isok = FALSE;
ITKCALL(TCTYPE_is_type_of(type, item_type, &isok));//判断type是否为item_type的子类或者相同
if (isok) {
is_type = 1;
}
else {
is_type = 0;
}
}
else {
}
return is_type;
}
wchar_t* c2w(const char* str)
{
/*
int length = strlen(str) + 1;
wchar_t* t = (wchar_t*)malloc(sizeof(wchar_t) * length);
memset(t, 0, length * sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, 0, str, strlen(str), t, length);
return t;
*/
int iSize;
wchar_t* pwszUnicode;
//返回接受字符串所需缓冲区的大小,已经包含字符结尾符'\0'
iSize = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); //iSize =wcslen(pwsUnicode)+1=6
pwszUnicode = (wchar_t*)malloc(iSize * sizeof(wchar_t)); //不需要 pwszUnicode = (wchar_t *)malloc((iSize+1)*sizeof(wchar_t))
MultiByteToWideChar(CP_ACP, 0, str, -1, pwszUnicode, iSize);
return pwszUnicode;
}
string WStringToString(const wstring& ws)
{
string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";
setlocale(LC_ALL, "chs");
const wchar_t* _Source = ws.c_str();
size_t _Dsize = 2 * ws.size() + 1;
char* _Dest = new char[_Dsize];
memset(_Dest, 0, _Dsize);
wcstombs(_Dest, _Source, _Dsize);
string result = _Dest;
delete[]_Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
}
void split(std::string s, const char* delim, std::vector<std::string>* ret)
{
size_t last = 0;
size_t index = s.find(delim, last);
int size = strlen(delim);
while (index != std::string::npos) {
ret->push_back(s.substr(last, index - last));
last = index + size;
index = s.find(delim, last);
}
if (index - last > 0) {
ret->push_back(s.substr(last, index - last));
}
}
string trim(string& str)
{
str.erase(0, str.find_first_not_of(" \t")); // 去掉头部空格
str.erase(str.find_last_not_of(" \t") + 1); // 去掉尾部空格
return str;
}
string trim(const char* wtr)
{
string str = wtr;
str.erase(0, str.find_first_not_of(" \t")); // 去掉头部空格
str.erase(str.find_last_not_of(" \t") + 1); // 去掉尾部空格
return str;
}
void updateRev(tag_t form, map<string, string> map_prop, map<string, vector<string>> map_props)
{
WriteLog("-------updateRev start---------开旁路\n");
POM_AM__set_application_bypass(true);
AOM_lock(form);
for (auto it = map_prop.begin(); it != map_prop.end(); it++)
{
string str = GbkToUtf8(it->second.c_str());
WriteLog("更新单值属性[%s]=[%s]\n", it->first, it->second.c_str());
ITKCALL(AOM_set_value_string(form, it->first.data(), str.c_str()));
}
for (auto it = map_props.begin(); it != map_props.end(); it++)
{
vector<string> values = it->second;
int size = values.size();
if (size > 0)
{
WriteLog("更新多值属性[%s]\n", it->first);
char** props;
props = (char**)MEM_alloc((size + 1) * sizeof(char*));
for (auto i = 0; i < size; i++)
{
string str = GbkToUtf8(values[i].c_str());
WriteLog("---[%s]\n", values[i].c_str());
props[i] = (char*)MEM_alloc((str.size() + 1) * sizeof(char));
tc_strcpy(props[i], str.data());
}
ITKCALL(AOM_set_value_strings(form, it->first.data(), size, props));
DOFREE(props);
}
else
{
WriteLog("多值属性[%s]无值\n", it->first);
}
}
AOM_save(form);
AOM_unlock(form);
POM_AM__set_application_bypass(false);
WriteLog("-------updateRev end---------关闭旁路\n");
}

@ -0,0 +1,75 @@
#include <sa/user.h>
#include <time.h>
#include <string>
#include <vector>
#include <map>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <io.h>
#include <direct.h>
#include <ict/ict_userservice.h>
#include <tccore/item.h>
#include <ae/ae.h>
#include <tc/folder.h>
#include <tccore/aom.h>
#include <pom/pom/pom.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//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 <epm/epm_task_template_itk.h>
#include <fclasses/tc_date.h>
#include <tcinit/tcinit.h>
#include <ics/ics.h>
#include <ics/ics2.h>
#include <pom/enq/enq.h>
#include <rdv/arch.h>
#include <tc/envelope.h>
#include <sstream>
#include <iomanip>
#include "common_itk_util.h"
#define CUST_PROP_ERROR_NO 38600
using namespace std;
#define DOFREE(obj) \
{ \
if(obj) \
{ \
MEM_free(obj); \
obj = NULL; \
} \
}
#define ISNULL(s) (s == NULL? "" : (s ? s : ""))
int checkIsTypeOrSubtype(tag_t objtag,char * type_name);
int Supor_open_bypass(void *returnValue);
int Supor_close_bypass(void *returnValue);
int Supor_add_release_status(void * returnValue);
int LB_getBomChildren(void* returnValue);
bool compareDate(date_t date1, date_t date2);
int getLasterDataset(tag_t rev_tag, tag_t relation, string object_type, string keyName, map<string, tag_t>& uidMap);
int LB_getMJ(void* return_data);
int LB_getMJbg(void* return_data);
int LB_getGylx(void* return_data);
int LB_getGybg(void* return_data);
int checkIsInType(tag_t objtag, string parentType);
int BOM_CHI_ISRELEASE(EPM_rule_message_t msg);
int ITK_server_bypass(void *returnValue);
int checkIsTypeOrSubtype(tag_t objtag, const char* type_name);
string WStringToString(const wstring& ws);
wchar_t* c2w(const char* str);
void split(std::string s, const char* delim, std::vector<std::string>* ret);
string trim(string& str);
string trim(const char* wtr);
void updateRev(tag_t form, map<string, string> map_prop, map<string, vector<string>> map_props);

File diff suppressed because it is too large Load Diff

@ -0,0 +1,370 @@
/*===================================================================================================
Copyright(c) 2011 Siemens PLM Software Corp. All rights reserved.
Unpublished - All rights reserved
====================================================================================================
File description:
Filename : epm_register_handler.c
This file registers functions which are called when Teamcenter is being initialized
====================================================================================================
Date Name Description of Change
2011-8-21 Ray creation
$HISTORY$
==================================================================================================*/
#pragma warning (disable: 4819)
/**
* @headerfile tcua
*/
#include <server_exits/user_server_exits.h>
#include <tccore/custom.h>
#include <tccore/item_msg.h>
#include <epm/epm.h>
/**
* @headerfile standard c & cpp header files
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
#include <tccore/method.h>
#include <tccore/tc_msg.h>
/**
* @headerfile user's header files
*/
#include "epm_register_handler.h"
#include "connor_util.h"
#include "Supor_register.h"
#define LIMITDAY 2016
int checkvalue(char* str)
{
int i;
for (i=0;i<strlen(str);i++)
{
if (isdigit(str[i]) == 0)
return 0;
}
return 1;
}
char* decrypt(char *lic_file)
{
char* p = NULL, buf[512], *str;
int i = 0;
FILE *fp1=NULL;
if((fp1 = fopen(lic_file,"r")) == NULL)
{
printf("can not open the license file\n");
return "";
}
fgets(buf, 9, fp1);
//printf("buf=%s\n",buf);
p = buf;
while(*p != '\0')
*p++ ^= i++;
p = buf;
while(*p != '\0')
*p++ ^= i++;
p = buf;
while(*p != '\0')
*p++ ^= i++;
return buf;
}
char* encrypt(char* str)
{
char* p = str;
int i = 0;
while(*p != '\0')
*p++ ^= i++;
return str;
}
//供流程调用的
//标准的注册供流程调用服务handler的入口 TC_save_msg
extern DLLAPI int USERSERVICE_custom_register_handlers(int *decision, va_list args)
{
int ifail = ITK_ok, n=0;
char date_buf[80],*expire_date, env[512], temp1[512], temp2[512];
time_t now;
struct tm *p;
*decision = ALL_CUSTOMIZATIONS;
METHOD_id_t mth_tag;
int status = ITK_ok;
(ifail = EPM_register_action_handler("Connor_signoff_dataset", "对数据集进行电子签名", (EPM_action_handler_t)Connor_signoff_dataset));
if(ifail==0)
{
printf("Registering action handler Connor_signoff_dataset success\n");
}else
{
printf("Registering action handler Supor_signoff_dataset failed\n");
}
(ifail = EPM_register_action_handler("Connor_signoff_form", "将审签信息记录到表单上", (EPM_action_handler_t)Connor_signoff_form));
if (ifail == 0)
{
printf("Registering action handler Connor_signoff_form success\n");
}
else
{
printf("Registering action handler Connor_signoff_form failed\n");
}
(ifail = EPM_register_action_handler("AddPdf", "另存上一个版本的pdf", (EPM_action_handler_t)AddPdf));
if (ifail == 0)
{
printf("Registering action handler AddPdf success\n");
}
else
{
printf("Registering action handler AddPdf failed\n");
}
(ifail = EPM_register_action_handler("Connor_creo_dataset", "备份creoPDF", (EPM_action_handler_t)Connor_creo_dataset));
if (ifail == 0)
{
printf("Registering action handler Connor_creo_dataset success\n");
}
else
{
printf("Registering action handler Connor_creo_dataset failed\n");
}
(ifail = EPM_register_action_handler("Connor_setPDF_status", "creoPDF设置发布状态", (EPM_action_handler_t)Connor_setPDF_status));
if (ifail == 0)
{
printf("Registering action handler Connor_setPDF_status success\n");
}
else
{
printf("Registering action handler Connor_setPDF_status failed\n");
}
return ifail;
}
int Connor_open_bypass(void* returnValue)
{
int ifail = ITK_ok;
char* propname;
ITKCALL(ifail = USERARG_get_string_argument(&propname));
printf("propname=================%s\n", propname);
if (strcmp(propname, "true") == 0) {
POM_AM__set_application_bypass(TRUE);
}
else {
POM_AM__set_application_bypass(FALSE);
}
return 0;
}
//定义JAVA调用的服务
//register service method
extern DLLAPI int USERSERVICE_custom_register_methods(int *decision, va_list args)
{
int ifail = ITK_ok;
METHOD_id_t mth_tag;
int
status = ITK_ok,
numberOfArguments = 0,
returnValueType = USERARG_STRING_TYPE,
*argumentList = NULL;
USER_function_t functionPtr;
numberOfArguments = 2;
//需要调用的函数地址函数地址
functionPtr = Supor_add_release_status;
//定义java需要传递的参数
argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int) );
argumentList[0] = USERARG_STRING_TYPE;
argumentList[1] = USERARG_STRING_TYPE;
//定义返回值的类型
returnValueType = USERARG_STRING_TYPE;
ITKCALL(status = USERSERVICE_register_method("Supor_add_release_status", functionPtr, numberOfArguments,
argumentList, returnValueType ));
MEM_free(argumentList);
if(status == ITK_ok)
{
fprintf( stdout, "RegisteringSupor_add_release_status\n" );
}
else
{
fprintf( stdout, "Registering[%d]Supor_add_release_status\n" , status );
}
numberOfArguments = 1;
functionPtr = LB_getBomChildren;
argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int));
argumentList[0] = USERARG_STRING_TYPE;
returnValueType = USERARG_STRING_TYPE;
ITKCALL(status = USERSERVICE_register_method("LB_getBomChildren", functionPtr, numberOfArguments,
argumentList, returnValueType));
MEM_free(argumentList);
if (status == ITK_ok)
{
fprintf(stdout, "\n Registering LB_getBomChildren finished\n");
}
else
{
fprintf(stdout, "\n Registering LB_getBomChildren failed %d\n", status);
}
numberOfArguments = 1;
functionPtr = LB_getMJ;
argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int));
argumentList[0] = USERARG_STRING_TYPE;
returnValueType = USERARG_STRING_TYPE;
ITKCALL(status = USERSERVICE_register_method("LB_getMJ", functionPtr, numberOfArguments,
argumentList, returnValueType));
MEM_free(argumentList);
if (status == ITK_ok)
{
fprintf(stdout, "\n Registering LB_getMJ finished\n");
}
else
{
fprintf(stdout, "\n Registering LB_getMJ failed %d\n", status);
}
numberOfArguments = 1;
functionPtr = LB_getMJbg;
argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int));
argumentList[0] = USERARG_STRING_TYPE;
returnValueType = USERARG_STRING_TYPE;
ITKCALL(status = USERSERVICE_register_method("LB_getMJbg", functionPtr, numberOfArguments,
argumentList, returnValueType));
MEM_free(argumentList);
if (status == ITK_ok)
{
fprintf(stdout, "\n Registering LB_getMJbg finished\n");
}
else
{
fprintf(stdout, "\n Registering LB_getMJbg failed %d\n", status);
}
numberOfArguments = 1;
functionPtr = LB_getGylx;
argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int));
argumentList[0] = USERARG_STRING_TYPE;
returnValueType = USERARG_STRING_TYPE;
ITKCALL(status = USERSERVICE_register_method("LB_getGylx", functionPtr, numberOfArguments,
argumentList, returnValueType));
MEM_free(argumentList);
if (status == ITK_ok)
{
fprintf(stdout, "\n Registering LB_getGylx finished\n");
}
else
{
fprintf(stdout, "\n Registering LB_getGylx failed %d\n", status);
}
numberOfArguments = 1;
functionPtr = LB_getGybg;
argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int));
argumentList[0] = USERARG_STRING_TYPE;
returnValueType = USERARG_STRING_TYPE;
ITKCALL(status = USERSERVICE_register_method("LB_getGybg", functionPtr, numberOfArguments,
argumentList, returnValueType));
MEM_free(argumentList);
if (status == ITK_ok)
{
fprintf(stdout, "\n Registering LB_getGybg finished\n");
}
else
{
fprintf(stdout, "\n Registering LB_getGybg failed %d\n", status);
}
numberOfArguments = 1;
functionPtr = ITK_server_bypass;
argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int) );
argumentList[0] = USERARG_STRING_TYPE;
returnValueType = USERARG_VOID_TYPE;
ITKCALL(status = USERSERVICE_register_method("ITK_server_bypass", functionPtr, numberOfArguments,
argumentList, returnValueType ));
MEM_free(argumentList);
if(status == ITK_ok)
{
fprintf( stdout, "\n Registering ITK_server_bypass finished\n" );
}
else
{
fprintf( stdout, "\n Registering ITK_server_bypass failed %d\n" , status );
}
numberOfArguments = 1;
functionPtr = Supor_open_bypass;
argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int));
argumentList[0] = USERARG_STRING_TYPE;
returnValueType = USERARG_VOID_TYPE;
ITKCALL(status = USERSERVICE_register_method("Supor_open_bypass", functionPtr, numberOfArguments,
argumentList, returnValueType));
MEM_free(argumentList);
if (status == ITK_ok)
{
fprintf(stdout, "RegisteringSupor_open_bypass\n");
}
else
{
fprintf(stdout, "Registering[%d]Supor_open_bypass\n", status);
}
numberOfArguments = 1;
functionPtr = Supor_close_bypass;
argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int));
argumentList[0] = USERARG_STRING_TYPE;
returnValueType = USERARG_VOID_TYPE;
ITKCALL(status = USERSERVICE_register_method("Supor_close_bypass", functionPtr, numberOfArguments,
argumentList, returnValueType));
MEM_free(argumentList);
if (status == ITK_ok)
{
fprintf(stdout, "RegisteringSupor_close_bypass\n");
}
else
{
fprintf(stdout, "Registering[%d]Supor_close_bypass\n", status);
}
//开旁路
numberOfArguments = 1;
functionPtr = Connor_open_bypass;
argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int));
argumentList[0] = USERARG_STRING_TYPE;
returnValueType = USERARG_VOID_TYPE;
ITKCALL(status = USERSERVICE_register_method("setbypass", functionPtr, numberOfArguments,
argumentList, returnValueType));
MEM_free(argumentList);
if (status == ITK_ok)
{
fprintf(stdout, "\n Registering setbypass finished\n");
}
else
{
fprintf(stdout, "\n Registering setbypass failed %d\n", status);
}
return ITK_ok;
}

@ -0,0 +1,36 @@

/*=================================================================================
* @file epm_register_handler.h
* @brief itk user exits function declation, to register custom handlers
* @date 2009/2/13
* @author Ray Li
* @history
* ===================================================================================
* Date Name Description
* 13-Feb-2009 Ray created
*===================================================================================*/
#ifndef EPM_REGISTER_HANDLER_CUSTOM
#define EPM_REGISTER_HANDLER_CUSTOM
#include <epm/epm.h>
#ifdef __cplusplus
extern "C" {
#endif
extern "C" int POM_AM__set_application_bypass(logical bypass);
extern DLLAPI int USERSERVICE_custom_register_handlers(int *, va_list);
extern DLLAPI int USERSERVICE_custom_register_methods(int *decision, va_list args);
#ifdef __cplusplus
}
#endif
#endif
/**
* @}
*/

@ -0,0 +1,160 @@
/*!
* @addtogroup common
* \file error_handling.h
* \brief
* \date 2008/6/10
* \author Ray Li
*/
#ifndef SIMPLE_ERR_H_INCLUDED
#define SIMPLE_ERR_H_INCLUDED
#include <tc/emh.h>
#include <pom/pom/pom_errors.h>
#include <pom/pom/pom.h>
#include <stdio.h>
#include <time.h>
#define BUFSIZE 512
//
#define HANDLER_ARGUMENT_ERROR EMH_USER_error_base + 1
//#define WORKFLOW_NODE_IS_NOT_VALID EMH_USER_error_base + 2
#define ERROR_STATUS_ERROR EMH_USER_error_base + 2
//#define HANDLER_PLACED_INVALID EMH_USER_error_base + 3
//
////user errors define
////<error id="100">在站点文件中缺少 %1$ 配置,或该配置中无数据项</error>
//#define ERROR_PREFERENCE_NOT_FOUND (EMH_USER_error_base + 100)
#define DOFREE(obj) \
{ \
if(obj) \
{ \
MEM_free(obj); \
obj = NULL; \
} \
}
//#define ECHO(X) printf X;
#define SYS_LOG(X) IMAN_write_syslog X;
#define LOG_ECHO(X) printf X; IMAN_write_syslog X;
/*!
* \def CALL(x)
*
*/
#define CALL(x) { \
int stat; \
char *err_string; \
if( (stat = (x)) != ITK_ok) \
{ \
EMH_ask_error_text (stat, &err_string); \
LOG_ECHO( ("ERROR: %d ERROR MSG: %s.\n",stat, err_string) ) \
LOG_ECHO( ("Function: %s FILE: %s LINE: %d\n", #x, __FILE__, __LINE__ ) ) \
MEM_free (err_string); \
return (stat); \
} \
}
/*!
* \def DO(x)
*
*/
#define DO(x) { \
int stat; \
char *err_string; \
if( (stat = (x)) != POM_ok) \
{ \
EMH_ask_error_text (stat, &err_string); \
printf ("ERROR: %d ERROR MSG: %s.\n", stat, err_string); \
printf ("Function: %s FILE: %s LINE: %d\n",#x, __FILE__, __LINE__); \
MEM_free (err_string); \
} \
}
/*!
* \def CALLRNULL(x)
*
*/
#define CALLRNULL(x) { \
int stat; \
char *err_string; \
if( (stat = (x)) != ITK_ok) \
{ \
EMH_ask_error_text (stat, &err_string); \
printf ("ERROR: %d ERROR MSG: %s.\n", stat, err_string); \
printf ("Function: %s FILE: %s LINE: %d\n",#x, __FILE__, __LINE__); \
MEM_free (err_string); \
return ((char *)NULL); \
} \
}
/*!
* \def CALL2(x)
*
*/
#define CALL2(x) { \
int stat, n_ifails, *serverities, *ifails, err_count; \
char *err_string, **texts; \
if( (stat = (x)) != ITK_ok) \
{ \
printf ("Function: %s FILE: %s LINE: %d\n",#x, __FILE__, __LINE__); \
EMH_ask_errors( &n_ifails, (const int**)(&serverities), (const int**)(&ifails), (const char***)(&texts) );\
for( err_count=0; err_count<n_ifails; err_count++ ) \
{ \
printf( "ERROR: %d ERROR MSG: %s.\n", ifails[i], texts[i] ); \
} \
MEM_free( serverities ); \
MEM_free( ifails ); \
MEM_free( texts ); \
return (stat); \
} \
} \
#define CHECK_FILE(x,ret) { \
FILE *stream = NULL; \
if( (stream = fopen(x,"rb")) == NULL ) { \
printf( "%s doesn't exists, please check!\n", x ); \
IMAN_write_syslog( "%s doesn't exists, please check!\n", x) ; \
ret = -1; \
} \
else { \
fclose(stream); \
stream = NULL; \
ret = 0; \
} \
} \
#define CHECK_FILE_NOT_EXISTS(x,ret) { \
FILE *stream = NULL; \
if( (stream = fopen(x,"rb")) != NULL ) { \
fclose(stream); \
stream = NULL; \
printf( "%s exists, please check!\n", x ); \
IMAN_write_syslog( "%s exists, please check!\n", x) ; \
ret = -1; \
} \
else { \
ret = 0; \
} \
} \
#endif

@ -0,0 +1,276 @@
#include "Supor_register.h"
#define SIGN_RELATION "S8SignOffR"
#define SIGN_INFO_OPTION "Supor_signoff_dataset"
#include<ae/ae.h>
#include <ae/dataset.h>
extern "C" int POM_AM__set_application_bypass(logical bypass);
using namespace std;
#define ITK_err 919012
extern "C" int POM_AM__set_application_bypass(logical bypass);
using namespace std;
//
//AE_copy_dataset(
// tag_t dataset, /**< (I) */
// const char name_of_new_dataset[WSO_name_size_c + 1], /**< (I) */
// tag_t* new_dataset /**< (O) */
// );
/*
primaryTag
secondTag
relationType
*/
void save_representation(tag_t primaryTag, tag_t secondTag, char *relationType)
{
//先判断是否已经存在
int count = 0;
tag_t *tags = NULL;
AOM_ask_value_tags(primaryTag, relationType, &count, &tags);
logical has = false;
char *secondUId = NULL;
POM_tag_to_uid(secondTag, &secondUId);
for (int i = 0; i < count; i++)
{
char *uid = NULL;
POM_tag_to_uid(tags[i], &uid);
if (strcmp(secondUId, uid) == 0) {
has = true;
DOFREE(uid);
break;
}
DOFREE(uid);
}
DOFREE(tags);
DOFREE(secondUId);
if (has == false) {
POM_AM__set_application_bypass(true);
tag_t typeTag = NULLTAG;
ITKCALL(GRM_find_relation_type(relationType, &typeTag));
ITKCALL(AOM_refresh(primaryTag, TRUE));
ITKCALL(AOM_refresh(secondTag, TRUE));
tag_t relationTag = NULLTAG;
ITKCALL(GRM_create_relation(primaryTag, secondTag, typeTag, NULLTAG, &relationTag));//如果关系已经存在,那么就是增加对象
ITKCALL(GRM_save_relation(relationTag));//很必要
ITKCALL(AOM_save(primaryTag));
ITKCALL(AOM_save(secondTag));
ITKCALL(AOM_refresh(primaryTag, FALSE));
ITKCALL(AOM_refresh(secondTag, FALSE));
POM_AM__set_application_bypass(false);
}
}
//发布对象
int set_release_status(tag_t item, char release_name[]) {
int ifail = ITK_ok;
tag_t release_status = NULL;
ITKCALL(ifail = RELSTAT_create_release_status(release_name, &release_status));
ITKCALL(ifail = RELSTAT_add_release_status(release_status, 1, &item, TRUE));
return ifail;
}
int AddPdf(EPM_action_message_t msg) {
char *log_file = NULL;
CreateLogFile("AddPdf", &log_file);
WriteLog("*************************************************************\n");
WriteLog("* AddPdf is strat ! *\n");
WriteLog("*************************************************************\n");
starTime();
int att_cnt = 0, *arg_num = NULL;
tag_t task = NULLTAG, rootTask_tag = NULLTAG, *attachments = NULL;
char *arg = NULL, *argflag = NULL, **argvalue = NULL;
char type[128] = "", name[128] = "";
char *str = "MEProcessRevision";
char *sType = NULL;
tag_t type_tag = NULLTAG, pdf_relation = NULLTAG;
task = msg.task;
ITKCALL(EPM_ask_root_task(task, &rootTask_tag));
ITKCALL(EPM_ask_attachments(rootTask_tag, EPM_target_attachment, &att_cnt, &attachments));
POM_AM__set_application_bypass(true); // 开旁路
ITKCALL(GRM_find_relation_type("LB2_PDF", &pdf_relation));
for (int i = 0; i < att_cnt; i++)
{
tag_t rev_tag = attachments[i] , item_tag = NULL;
char* obj_str = NULL;
char* obj_type = NULL;
ITKCALL(AOM_ask_value_string(rev_tag, "object_string", &obj_str));
WriteLog("当前对象:%s\n", obj_str);
ITKCALL(AOM_ask_value_string(rev_tag, "object_type", &obj_type));
// 获得父对象
ITKCALL(AOM_ask_value_tag(rev_tag, "items_tag", &item_tag));
char* item_str = NULL;
ITKCALL(AOM_ask_value_string(item_tag, "object_string", &item_str));
WriteLog("父对象:%s\n", item_str);
tag_t *all_rev_tags = NULL;
int all_num = 0;
// 获得父对象的版本列表,找到当前版本的上一个版本
ITKCALL(AOM_ask_value_tags(item_tag, "revision_list", &all_num, &all_rev_tags));
for (int j = 0; j < all_num; j++) {
char* this_str = NULL;
ITKCALL(AOM_ask_value_string(all_rev_tags[j], "object_string", &this_str));
WriteLog("父对象的子版本:%s\n", this_str);
if (j != 0 && strcmp(this_str, obj_str) == 0) {
// 找到了上一个版本把上一个版本里的pdf转存过来
tag_t end_tag = all_rev_tags[j - 1];
char* end_tag_str = NULL;
ITKCALL(AOM_ask_value_string(end_tag, "object_string", &end_tag_str));
WriteLog("对应的上一个版本:%s\n", end_tag_str);
tag_t sp_relation = NULLTAG;
ITKCALL(GRM_find_relation_type("IMAN_specification", &sp_relation));
int mjcnt = 0, pdfcnt = 0;
tag_t *mj_tags = NULLTAG, *pdf_tags = NULLTAG;
ITKCALL(GRM_list_secondary_objects_only(all_rev_tags[j], sp_relation, &mjcnt, &mj_tags));
vector<tag_t> dwg_vec;
for (int j = 0; j < mjcnt; j++) {
char* object_type2 = NULL;
AOM_ask_value_string(mj_tags[j], "object_type", &object_type2);
if (strcmp("LB2_CAD", object_type2) == 0) {
int status_cnt = 0;
tag_t* dwg_status = NULLTAG;
ITKCALL(AOM_ask_value_tags(mj_tags[j], "release_status_list", &status_cnt, &dwg_status));
// *
if (status_cnt > 0) {
dwg_vec.push_back(mj_tags[j]);
}
/*if (status_cnt > 0) {
char *dwg_status_name = NULL;
RELSTAT_ask_release_status_type(dwg_status[status_cnt - 1], &dwg_status_name);
WriteLog("状态:%s\n", dwg_status_name);
if (strcmp("LB2_BG", dwg_status_name) == 0) {
dwg_vec.push_back(mj_tags[j]);
}
DOFREE(dwg_status_name);
}*/
DOFREE(dwg_status);
}
DOFREE(object_type2);
}
ITKCALL(GRM_list_secondary_objects_only(end_tag, pdf_relation, &pdfcnt, &pdf_tags));
POM_AM__set_application_bypass(true);
for (int j = 0; j < pdfcnt; j++) {
char* object_type2 = NULL;
AOM_ask_value_string(pdf_tags[j], "object_type", &object_type2);
if (strcmp("PDF", object_type2) == 0) {
char* object_name2 = NULL;
AOM_ask_value_string(pdf_tags[j], "object_name", &object_name2);
string pdfName(object_name2);
pdfName = pdfName.substr(0, pdfName.find(".pdf"));
WriteLog("PDF文件名:%s\n", pdfName.c_str());
for (int d = 0; d < dwg_vec.size(); d++) {
char* object_name = NULL;
AOM_ask_value_string(dwg_vec[d], "object_name", &object_name);
if (strstr(object_name, pdfName.c_str()) != NULL) {
WriteLog("有状态,开始转存\n");
tag_t new_dataset = NULL;
char* new_name = NULL;
ITKCALL(AOM_ask_value_string(pdf_tags[j], "object_name", &new_name));
AE_copy_dataset_with_id(pdf_tags[j], new_name, "", "A", &new_dataset);
// 获取发布状态
tag_t *status = NULL;
int snum = 0;
ITKCALL(AOM_ask_value_tags(pdf_tags[j], "release_status_list", &snum, &status));
if (snum > 0) {
// 给新数据集添加状态
AOM_lock(new_dataset);
char* status_name = NULL;
char release_name[128 + 1];
ITKCALL(AOM_ask_value_string(status[0], "object_name", &status_name));
strcpy(release_name, status_name);
set_release_status(new_dataset, release_name);
/*ITKCALL(AOM_set_value_tags(new_dataset, "release_status_list", 0, status));
ITKCALL(AOM_set_value_tags(new_dataset, "release_status_list", snum, status));*/
AOM_save(new_dataset);
AOM_unlock(new_dataset);
AOM_refresh(new_dataset, false);
save_representation(rev_tag, new_dataset, "LB2_PDF");
}
}
DOFREE(object_name);
}
DOFREE(object_name2);
}
DOFREE(object_type2);
}
DOFREE(mj_tags);
DOFREE(pdf_tags);
//int pdfcnt = 0;
//tag_t *pdf_tags = NULLTAG;
//ITKCALL(GRM_list_secondary_objects_only(end_tag, pdf_relation, &pdfcnt, &pdf_tags));
//for (int k = 0; k < pdfcnt; k++) {
// char* pdf_str = NULL;
// ITKCALL(AOM_ask_value_string(pdf_tags[k], "object_string", &pdf_str));
// WriteLog("PDF:%s\n", pdf_str);
// // 获取发布状态
// tag_t *status = NULL;
// int snum = 0;
// ITKCALL(AOM_ask_value_tags(pdf_tags[k], "release_status_list", &snum, &status));
// // 有状态的才转存
// if (snum != 0) {
// WriteLog("有状态,开始转存\n");
// tag_t new_dataset = NULL;
// char* new_name = NULL;
// ITKCALL(AOM_ask_value_string(pdf_tags[k], "object_name", &new_name));
// AE_copy_dataset_with_id(pdf_tags[k], new_name, "", "A", &new_dataset);
// // 给新数据集添加状态
// AOM_lock(new_dataset);
// ITKCALL(AOM_set_value_tags(new_dataset, "release_status_list", 1, status));
// AOM_save(new_dataset);
// AOM_unlock(new_dataset);
// AOM_refresh(new_dataset, false);
// save_representation(rev_tag, new_dataset, "LB2_PDF");
// }
//}
break;
}
}
}
POM_AM__set_application_bypass(false);
WriteLog("*************************************************************\n");
WriteLog("* AddPdf is end ! *\n");
WriteLog("*************************************************************\n");
CloseLog();
return ITK_ok;
}

@ -0,0 +1,47 @@

#pragma warning (disable: 4819)
/**
* @headerfile tcua
*/
#include <server_exits/user_server_exits.h>
#include "error_handling.h"
#include "epm_register_handler.h"
#include <tccore/custom.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @fn extern "C" DLLAPI int liborigin_register_callbacks
* @return usually return ITK_ok
* @brief liborigin customization entry
* dll"_"
*/
DLLAPI int SignOff_itk_register_callbacks()
{
int ifail = ITK_ok;
TC_write_syslog("*******************************************************************************\n");
TC_write_syslog("* SignOff_itk register_callbacks is starting *\n");
TC_write_syslog("*******************************************************************************\n");
ITKCALL( ifail = CUSTOM_register_exit( "SignOff_itk", "USERSERVICE_register_methods",
(CUSTOM_EXIT_ftn_t)USERSERVICE_custom_register_methods) );
fprintf( stdout, "\n SignOff_itk registering USERSERVICE_custom_register_methods completed!\n" );
ITKCALL( ifail = CUSTOM_register_exit("SignOff_itk","USER_gs_shell_init_module",
(CUSTOM_EXIT_ftn_t)USERSERVICE_custom_register_handlers) );
fprintf( stdout, "\n SignOff_itk registering USERSERVICE_custom_register_handlers completed!\n" );
return ifail;
}
#ifdef __cplusplus
}
#endif

@ -0,0 +1,472 @@
/*=====================================================================================================================
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 "common_itk_util.h"
#include "ocilib.h"
#include <stdlib.h>
#define NUM 100
#define USERNAME "MES"
#define PASSWORD "infodba"
#define DBNAME "TCPORD"
// 定义句柄结构
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");
WriteLog("environment create error!\n\n");
return -1;
}
else
{
printf("environment create success!\n\n");
WriteLog("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");
WriteLog("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");
WriteLog("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");
WriteLog("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");
WriteLog("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");
WriteLog("init statement handle error!\n\n");
return -1;
}
printf("init handle success!\n\n");
WriteLog("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);
WriteLog("Error - %.*s/n", 512, errbuf);
return -1;
}
else {
printf("数据库连接成功!\n\n");
WriteLog("数据库连接成功!\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");
WriteLog("prepare SQL statements error!\n\n");
}
else
{
printf("prepare SQL statements success!\n\n");
WriteLog("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);
WriteLog("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);
WriteLog("execute SQL statement Error - %.*s\n", 512, errbuf);
return -1;
}
else
{
printf("execute SQL statement success!\n\n");
WriteLog("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");
WriteLog("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);
WriteLog("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);
WriteLog("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);
WriteLog("execute SQL Error - %.*s\n", 512, errbuf);
return -1;
}
else
{
printf("execute SQL success!\n\n");
WriteLog("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);
WriteLog("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);
WriteLog("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);
WriteLog("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");
WriteLog("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");
WriteLog("继续操作1\n");
QuitFreeHandle();
return -1;
}
printf("继续操作2\n");
WriteLog("继续操作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");
WriteLog("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");
WriteLog("开始操作\n");
return ExecuteSQL(SQL,0,NULL);
}
// 断开连接
void DisConnServer()
{
if(ociHandle != NULL)
QuitFreeHandle();
}

@ -0,0 +1,98 @@
/*=====================================================================================================================
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,8 @@
// stdafx.cpp : 只包括标准包含文件的源文件
// XNY_itk.pch 将作为预编译头
// stdafx.obj 将包含预编译类型信息
#include "stdafx.h"
// TODO: 在 STDAFX.H 中引用任何所需的附加头文件,
//而不是在此文件中引用

@ -0,0 +1,15 @@
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: 在此处引用程序需要的其他头文件

@ -0,0 +1,146 @@
/**
* @file string_helper.cpp
* @brief string utility functions' implemention
* @author James
* @history
* ===================================================================================
* Date Name Description of Change
* 09-July-2008 James
* 14-Jau-2009 James modify Split functions, add trim blank characters
*/
#pragma warning(disable:4996)
//
//#include <stdio.h>
//#include <iostream>
//#include <windows.h>
#include "string_helper.h"
string TrimString( string strArg )
{
size_t index1 = 0;
index1 = strArg.find_first_not_of( ' ');
if( index1 != string::npos )
strArg.erase( strArg.begin(), strArg.begin()+index1 );
index1 = strArg.find_last_not_of( ' ');
if( index1 != string::npos )
strArg.erase( strArg.begin() + index1 + 1 );
return strArg;
}
void Split( string strArg, char spliter, vector<string> &ans )
{
ans.clear();
size_t index0 = 0;
string one_arg;
if ( strArg.find_first_not_of(' ') == string::npos )
strArg = "";
while( strArg.size()>0 )
{
index0 = strArg.find_first_of( spliter );
if( index0 != string::npos )
{
one_arg = strArg.substr( 0,index0 );
strArg = strArg.substr( index0 + 1 );
ans.push_back( one_arg );
}
else
{
ans.push_back( strArg );
break;
}
}
}
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;
}
}
}
void RemoveLiner( string &in, string &out )
{
char buf[BUFSIZ] = "";
for( int i=0; i<(int)in.size(); i++ )
{
if( in[i] == '\n')
continue;
else
sprintf( buf,"%s%c", buf, in[i] );
}
out.assign(buf);
}
////Converting a WChar string to a Ansi string
//std::string WChar2Ansi(LPCWSTR pwszSrc)
//{
// int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);
//
// if (nLen<= 0) return std::string("");
//
// char* pszDst = new char[nLen];
// if (NULL == pszDst) return std::string("");
//
// WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);
// pszDst[nLen -1] = 0;
//
// std::string strTemp(pszDst);
// delete [] pszDst;
//
// return strTemp;
//}
//
//string ws2s(wstring& inputws){ return WChar2Ansi(inputws.c_str()); }
//
////Converting a Ansi string to WChar string
//std::wstring Ansi2WChar(LPCSTR pszSrc, int nLen)
//{
// int nSize = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pszSrc, nLen, 0, 0);
// if(nSize <= 0) return NULL;
//
// WCHAR *pwszDst = new WCHAR[nSize+1];
// if( NULL == pwszDst) return NULL;
//
// MultiByteToWideChar(CP_ACP, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize);
// pwszDst[nSize] = 0;
//
// if( pwszDst[0] == 0xFEFF) // skip Oxfeff
// for(int i = 0; i < nSize; i ++)
// pwszDst[i] = pwszDst[i+1];
//
// wstring wcharString(pwszDst);
// delete pwszDst;
//
// return wcharString;
//}
//
//std::wstring s2ws(const string& s){ return Ansi2WChar(s.c_str(),s.size());}

@ -0,0 +1,25 @@
/**
* @file string_helper.h
* @brief string utilities to help dealing with string
* @author James
* @history
* ===================================================================================
* Date Name Description of Change
* 09-July-2008 James
*/
#ifndef STRING_HELPER
#define STRING_HELPER
#include <string>
#include <vector>
using namespace std;
string TrimString( string strArg );
void Split( string strArg, char spliter, vector<string> &ans );
void Split( string strArg, string spliter, vector<string> &ans );
void RemoveLiner( string &in, string &out );
//string ws2s(wstring& inputws);
//wstring s2ws(const string& s);
#endif

@ -0,0 +1,252 @@
/*==================================================================================================================
Copyright(c) 2012 ORIGIN.
Unpublished - All rights reserved
====================================================================================================================
File description:
Filename: string_utils.c
Module : Common module.
This file includes some operations of the string.
====================================================================================================================
Date Name Description of Change
3-Feb-2015 Ray li Initialize creation
$HISTORY$
===================================================================================================================*/
#ifndef _cplusplus
#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE
#endif
#endif
#include <fclasses/tc_string.h>
#include <tc/tc_util.h>
#include <tccore/workspaceobject.h>
#include <stdlib.h>
#include <ctype.h>
#include "string_utils.h"
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;
}
}
}
char* GSTR_clone( char **dst, const char *src )
{
char *retVal = NULL;
int srcLen = 0;
*dst = NULL;
if (src == NULL)
return NULL;
srcLen = (int)tc_strlen( src ) + 1;
*dst = (char*)MEM_alloc( srcLen * sizeof(char) );
retVal = tc_strncpy( *dst, src, srcLen );
(*dst)[srcLen - 1] = '\0';
return retVal;
}
char* GSTR_copy( char *dst, const char *src, int dstSize )
{
char *retVal = tc_strncpy( dst, src, dstSize );
dst[dstSize - 1] = '\0';
return retVal;
}
char* GSTR_int_to_string( char **dst, int value )
{
char strVal[128 + 1];
*dst = NULL;
memset( strVal, 0, sizeof(strVal)/sizeof(char) );
sprintf( strVal, "%d", value );
return GSTR_clone( dst, strVal );
}
void GSTR_format_int_to_string( char *dst, int digitNum, int value )
{
char sNum[WSO_desc_size_c + 1];
sprintf( sNum, "%%0%dd", digitNum );
sprintf( dst, sNum, value );
}
void GSTR_format_string( const char *dst, int m, const char *fill_char, char **out )
{
char sNum[WSO_name_size_c + 1] = {0};
char sNew[WSO_name_size_c + 1] = {0};
sprintf( sNum, "%%%d.%ds", m, m );
sprintf( sNew, sNum, dst );
STRNG_replace_str( sNew, " ", fill_char, out );
}
char* GSTR_string_append( const char *s1, const char *s2 )
{
char *s = NULL;
if (s1 == NULL || s2 == NULL)
{
GSTR_clone(&s, s1 == NULL ? (s2 == NULL ? "" : s2) : s1 );
}
else
{
int size = (int)tc_strlen(s1) + (int)tc_strlen(s2) + 1;
s = (char *)MEM_alloc( size );
tc_strcpy( s, s1 );
tc_strcat( s, s2 );
s[size - 1] = '\0';
}
return s;
}
logical GSTR_is_float(const char *str)
{
logical isfloat = true;
char *pStr = (char *)str;
logical hasPositive = false;
logical hasMinus = false;
logical hasDot = false;
if (str == NULL)
return false;
while (*pStr != '\0' && isfloat == true)
{
if ( (*pStr >= '0' && *pStr <= '9'))
{
//continue;
}
else if ( *pStr == '+' )
{
isfloat = (hasPositive ? false : (hasPositive = true));
}
else if ( *pStr == '-' )
{
isfloat = (hasMinus ? false : (hasMinus = true));
}
else if ( *pStr == '.' )
{
isfloat = (hasDot ? false : (hasDot = true));
}
else
isfloat = false;
pStr ++;
}
return isfloat;
}
logical GSTR_is_number(const char *str)
{
logical is_number = true;
char *pStr = (char *)str;
if (str == NULL)
return false;
while (*pStr != '\0')
{
if ( !( (*pStr >= '0' && *pStr <= '9') || *pStr == '-' ) )
{
is_number = false;
break;
}
pStr ++;
}
return is_number;
}
logical GSTR_is_ascii(char ch)
{
return ((unsigned int)ch) < 128;
}
int GSTR_trim_l( char *str, char s )
{
int count = 0;
char *pointer = str, *poffset = NULL;
if (str == NULL || str[0] == '\0')
return 0;
while ( *pointer != '\0' )
{
if ( *pointer != s )
{
break;
}
count++;
pointer++;
}
if (count == 0)
return 0;
poffset = str + count;
pointer = str;
while ( *poffset != '\0' )
{
*pointer = *poffset;
pointer ++;
poffset ++;
}
*pointer = '\0';
return count;
}
int GSTR_trim_r( char *str, char s )
{
int count = 0;
char *pointer = NULL;
if (str == NULL || str[0] == '\0')
return 0;
pointer = str + ((int) strlen(str) - 1);
while ( pointer != str )
{
if ( *pointer != s )
{
break;
}
*pointer = '\0';
count++;
pointer--;
}
return count;
}
void GSTR_trim_float( char *floatValue )
{
if ( !IS_EMPTY(floatValue) && tc_strstr(floatValue, ".") != NULL )
{
int len = 0;
GSTR_trim_r(floatValue, '0');
len = (int)tc_strlen(floatValue);
if (floatValue[ len - 1 ] == '.')
floatValue[ len - 1 ] = '\0';
}
}

@ -0,0 +1,125 @@
/*=====================================================================================================================
Copyright(c) 2005 ORIGIN PLM Software Corp. All rights reserved.
Unpublished - All rights reserved
=======================================================================================================================
File description:
Filename: string_utils.h
Module : Common module.
This file includes some operations of the string.
=======================================================================================================================
Date Name Description of Change
14-Jul-2009 Ray Li Initialize creation
$HISTORY$
=====================================================================================================================*/
#ifndef STRING_UTILS_H
#define STRING_UTILS_H
#include <string>
#include <map>
#include <vector>
using namespace std;
#ifdef __cplusplus
extern "C"
{
#endif
// @{{ String assister
#define IS_NULL(S) ((S)==NULL)
#define IS_EMPTY(S) (((S)==NULL) || !(*(S)))
// @}}
void Split( string strArg, string spliter, vector<string> &ans );
/**
* Clones the string.
* @param dst - <OF> the output string.
* @param src - <I> the string to be cloned.
* @return - the destinatin string pointer.
*/
extern char* GSTR_clone( char **dst, const char *src );
/**
* Copy safely the string with null end.
* @param dst - <O> the output string.
* @param src - <I> the string to be cloned.
* @param dstSize - <I> the size of output string.
* @return - the destinatin string pointer.
*/
extern char *GSTR_copy( char *dst, const char *src, int dstSize );
/**
* Converts int to string.
* @param dst - <OF> the output string.
* @param value - <I> the int to be cloned.
* @return - the destinatin string pointer.
*/
extern char* GSTR_int_to_string( char **dst, int value );
/**
* Formats the int/string value as string.
* @param dst - <O> the destination string.
* @param digitNum - <I> the digit number of the value.
* @param value - <I> the value to be converted.
* @return - N/A.
*/
extern void GSTR_format_int_to_string( char *dst, int digitNum, int value );
extern void GSTR_format_string( const char *dst, int m, const char *fill_char, char **out );
/**
* Appends the strings( never null returned )
* @param s1 - <I> string 1
* @param s2 - <I> string 2
* @return - <OF> new string
*/
extern char* GSTR_string_append( const char *s1, const char *s2 );
/**
* Whether the string is float type
* @param str - <I> The string
*
* NOTE: it's only check whether each word is in "+-.0123456789", not care the float with "E" or the float rule,
* like "00-1.+01", it will return true.
* @return - return true if it is one.
*/
extern logical GSTR_is_float(const char *str);
/**
* Whether all char of the string are number
* @param str - <I> The string
*
* NOTE: it's only check whether each word is in "0123456789"
* @return - return true if it is one.
*/
extern logical GSTR_is_number(const char *str);
/**
* Is ascii char
* @param ch - <I> ascii char
* @return - return true if it is.
*/
extern logical GSTR_is_ascii(char ch);
/**
* Trims the string's prefix.
* @param str - <I> The string
* @param s - <I> The char
*
* @return - count.
*/
extern int GSTR_trim_l( char *str, char s );
extern int GSTR_trim_r( char *str, char s );
/**
* Remove the zero.
* For Example:
* floatValue="50.00" -> = "50"
* floatValue="50.0100" -> = "50.01"
* @return - count.
*/
extern void GSTR_trim_float( char *floatValue );
#ifdef __cplusplus
}
#endif
#endif //STRING_UTILS_H

@ -0,0 +1,8 @@
#pragma once
// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。
// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h并将
// 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
#include <SDKDDKVer.h>

@ -0,0 +1,103 @@
/**
* @file common_itk_util.cpp
* @brief itk warpper utility function
* @author James
* @history
* ===================================================================================
* Date Name Description of Change
* 18-July-2008 Ray
*/
#include <tc/tc.h>
#include <tc/tc_util.h>
#include <tc/tc_arguments.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
//
#ifdef WIN32
#include <io.h>
#include <direct.h>
#else
#include <unistd.h>
#endif
//
#include "tc_log.h"
#define ARGS_LENGTH 200
#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
#define DOFREE(obj) \
{ \
if(obj) \
{ \
MEM_free(obj); \
obj = NULL; \
} \
}
FILE* logFile = NULL;
void CreateLogFile(char* logFileName)
{
int i=0;
logFile = NULL;
//get logFileName
sprintf(logFileName, "%s", logFileName);
printf("log file name: %s\n", logFileName);
//create log file
if((logFile = fopen(logFileName, "w"))==NULL)
{
printf("log file create failed\n");
}
}
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;
}
}

@ -0,0 +1,30 @@
/**
* @file common_itk_util.h
* @brief itk warpper utility function
* @author Ray
* @history
* ===================================================================================
* Date Name Description of Change
* 09-July-2008 Ray
*/
#ifndef TC_LOG_H
#define TC_LOG_H
#ifdef __cplusplus
extern "C" {
#endif
void CreateLogFile(char* logFileName);
void WriteLog(const char* format, ...);
void CloseLog(void);
//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 @@
cl : 命令行 error D8016: “/O2”和“/RTC1”命令行选项不兼容

@ -0,0 +1,2 @@
PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.28.29910:TargetPlatformVersion=10.0.19041.0:
Debug|x64|C:\Users\86183\Desktop\项目代码\老板电器项目\SignOff_itk\|

@ -0,0 +1,26 @@
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\vc142.pdb
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\common_itk_util.obj
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\connor_signoff_form.obj
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\connor_signoff_dataset.obj
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\string_utils.obj
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\string_helper.obj
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\ocilib.obj
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\lib_custom_main.obj
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\lcpdf.obj
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\epm_register_handler.obj
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\crul_server_call_httpserver.obj
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\connor_util.obj
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\connor2.obj
d:\source\北方股份\电子签名\signoff_itk\x64\release\signoff_itk.dll
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\signoff_itk.ipdb
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\signoff_itk.iobj
d:\source\北方股份\电子签名\signoff_itk\x64\release\signoff_itk.pdb
d:\source\北方股份\电子签名\signoff_itk\x64\release\signoff_itk.lib
d:\source\北方股份\电子签名\signoff_itk\x64\release\signoff_itk.exp
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\signoff_itk.tlog\cl.command.1.tlog
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\signoff_itk.tlog\cl.read.1.tlog
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\signoff_itk.tlog\cl.write.1.tlog
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\signoff_itk.tlog\link.command.1.tlog
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\signoff_itk.tlog\link.read.1.tlog
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\signoff_itk.tlog\link.write.1.tlog
d:\source\北方股份\电子签名\signoff_itk\signoff_itk\x64\release\signoff_itk.tlog\signoff_itk.write.1u.tlog

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<ProjectOutputs>
<ProjectOutput>
<FullPath>D:\source\北方股份\电子签名\SignOff_itk\x64\Release\SignOff_itk.dll</FullPath>
</ProjectOutput>
</ProjectOutputs>
<ContentFiles />
<SatelliteDlls />
<NonRecipeFileRefs />
</Project>

@ -0,0 +1,179 @@
 common_itk_util.c
Connor2.cpp
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(804,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(5422,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(379,5): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(380,5): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(381,5): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(382,5): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(383,5): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(384,5): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(403,5): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(404,5): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(405,5): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(424,5): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(161,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(168,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(175,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(182,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(189,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(196,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(203,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(210,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(217,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(224,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(231,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(238,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(245,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(252,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(259,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(266,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(273,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(363,4): warning C4996: 'AOM_save': "AOM_save" deprecated in Teamcenter "11.2"; Use "AOM_save_with_extensions or AOM_save_without_extensions" instead.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(426,44): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(430,5): warning C4996: 'AOM_save': "AOM_save" deprecated in Teamcenter "11.2"; Use "AOM_save_with_extensions or AOM_save_without_extensions" instead.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(475,4): warning C4996: 'AOM_save': "AOM_save" deprecated in Teamcenter "11.2"; Use "AOM_save_with_extensions or AOM_save_without_extensions" instead.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor2.cpp(574,3): warning C4996: 'AOM_save': "AOM_save" deprecated in Teamcenter "11.2"; Use "AOM_save_with_extensions or AOM_save_without_extensions" instead.
connor_util.cpp
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(804,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(5422,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(102,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(105,62): warning C4267: “参数”: 从“size_t”转换到“int”可能丢失数据
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(107,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(133,54): warning C4267: “参数”: 从“size_t”转换到“int”可能丢失数据
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(134,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(141,2): warning C4476: "printf": 格式说明符中的类型字段字符“Y”未知
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(141,2): warning C4476: "printf": 格式说明符中的类型字段字符“m”未知
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(141,2): warning C4473: “printf”: 没有为格式字符串传递足够的参数
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(141,2): message : 占位符和其参数预计 2 可变参数,但提供的却是 0 参数
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(141,2): message : 缺失的可变参数 1 为格式字符串“%d”所需
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(142,2): warning C4476: "printf": 格式说明符中的类型字段字符“Y”未知
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(142,2): warning C4476: "printf": 格式说明符中的类型字段字符“m”未知
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(142,2): warning C4473: “printf”: 没有为格式字符串传递足够的参数
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(142,2): message : 占位符和其参数预计 2 可变参数,但提供的却是 0 参数
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(142,2): message : 缺失的可变参数 1 为格式字符串“%d”所需
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(147,2): warning C4996: 'sscanf': This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(149,2): warning C4996: 'sscanf': This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(339,54): warning C4267: “参数”: 从“size_t”转换到“int”可能丢失数据
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(340,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(378,54): warning C4267: “参数”: 从“size_t”转换到“int”可能丢失数据
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(379,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(469,54): warning C4267: “参数”: 从“size_t”转换到“int”可能丢失数据
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(470,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(675,54): warning C4267: “参数”: 从“size_t”转换到“int”可能丢失数据
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(676,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(756,5): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(757,5): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(758,5): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(830,6): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(909,2): warning C4996: 'wcstombs': This function or variable may be unsafe. Consider using wcstombs_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(921,26): warning C4267: “初始化”: 从“size_t”转换到“int”可能丢失数据
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(968,27): warning C4267: “初始化”: 从“size_t”转换到“int”可能丢失数据
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(978,64): warning C4267: “参数”: 从“size_t”转换到“int”可能丢失数据
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\connor_util.cpp(989,2): warning C4996: 'AOM_save': "AOM_save" deprecated in Teamcenter "11.2"; Use "AOM_save_with_extensions or AOM_save_without_extensions" instead.
CRUL_server_call_httpserver.cpp
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(804,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(5422,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\CRUL_server_call_httpserver.cpp(14,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\CRUL_server_call_httpserver.cpp(46,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\CRUL_server_call_httpserver.cpp(76,2): warning 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.
epm_register_handler.cpp
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\epm_register_handler.cpp(65,12): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\epm_register_handler.cpp(61,29): warning C4101: “str”: 未引用的局部变量
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\epm_register_handler.cpp(98,9): warning C4101: “now”: 未引用的局部变量
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\epm_register_handler.cpp(97,56): warning C4101: “temp2”: 未引用的局部变量
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\epm_register_handler.cpp(97,21): warning C4101: “expire_date”: 未引用的局部变量
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\epm_register_handler.cpp(97,7): warning C4101: “date_buf”: 未引用的局部变量
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\epm_register_handler.cpp(103,14): warning C4101: “mth_tag”: 未引用的局部变量
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\epm_register_handler.cpp(99,17): warning C4101: “p”: 未引用的局部变量
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\epm_register_handler.cpp(97,34): warning C4101: “env”: 未引用的局部变量
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\epm_register_handler.cpp(97,44): warning C4101: “temp1”: 未引用的局部变量
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\epm_register_handler.cpp(178,14): warning C4101: “mth_tag”: 未引用的局部变量
lcpdf.cpp
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(804,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(5422,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\lcpdf.cpp(63,3): warning C4996: 'AOM_save': "AOM_save" deprecated in Teamcenter "11.2"; Use "AOM_save_with_extensions or AOM_save_without_extensions" instead.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\lcpdf.cpp(64,3): warning C4996: 'AOM_save': "AOM_save" deprecated in Teamcenter "11.2"; Use "AOM_save_with_extensions or AOM_save_without_extensions" instead.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\lcpdf.cpp(204,10): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\lcpdf.cpp(210,10): warning C4996: 'AOM_save': "AOM_save" deprecated in Teamcenter "11.2"; Use "AOM_save_with_extensions or AOM_save_without_extensions" instead.
lib_custom_main.cpp
ocilib.cxx
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(804,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(5422,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\ocilib.cxx(166,4): warning C4267: “参数”: 从“size_t”转换到“ub4”可能丢失数据
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\ocilib.cxx(193,4): warning C4267: “参数”: 从“size_t”转换到“ub4”可能丢失数据
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\ocilib.cxx(267,3): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\ocilib.cxx(283,3): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\ocilib.cxx(406,3): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\ocilib.cxx(441,4): warning 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.
string_helper.cpp
string_utils.cxx
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(804,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(5422,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
Connor_signoff_dataset.cpp
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(804,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(5422,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(53,32): warning C4267: “初始化”: 从“size_t”转换到“int”可能丢失数据
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(218,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(219,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(220,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(221,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(222,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(223,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(224,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(225,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(226,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(255,3): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(266,2): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(273,4): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(297,5): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(320,4): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(325,6): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(349,7): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(371,6): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(539,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(546,7): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(553,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(560,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(567,7): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(574,7): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(581,7): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(588,7): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(595,7): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(602,7): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(609,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(616,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(623,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(630,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(637,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(644,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(651,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_dataset.cpp(659,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
Connor_signoff_form.cpp
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(804,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\WorkEnvironment\tc14ITK\include\pom\pom\pom.h(5422,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(115,3): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(116,3): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(138,7): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(139,7): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(140,7): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(145,7): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(146,7): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(147,7): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(148,7): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(150,7): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(151,7): warning 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.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(67,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(75,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(82,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(89,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(96,8): warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _stricmp. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(159,7): warning C4996: 'sscanf': This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(161,7): warning C4996: 'sscanf': This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
D:\source\北方股份\电子签名\SignOff_itk\SignOff_itk\Connor_signoff_form.cpp(276,8): warning C4996: 'AOM_save': "AOM_save" deprecated in Teamcenter "11.2"; Use "AOM_save_with_extensions or AOM_save_without_extensions" instead.
正在创建库 D:\source\北方股份\电子签名\SignOff_itk\x64\Release\SignOff_itk.lib 和对象 D:\source\北方股份\电子签名\SignOff_itk\x64\Release\SignOff_itk.exp
正在生成代码
Previous IPDB not found, fall back to full compilation.
All 920 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
已完成代码的生成
SignOff_itk.vcxproj -> D:\source\北方股份\电子签名\SignOff_itk\x64\Release\SignOff_itk.dll

@ -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\北方股份\电子签名\SignOff_itk\|

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -0,0 +1,79 @@
#ifndef CURLINC_CURLVER_H
#define CURLINC_CURLVER_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
/* This header file contains nothing but libcurl version info, generated by
a script at release-time. This was made its own header file in 7.11.2 */
/* This is the global package copyright */
#define LIBCURL_COPYRIGHT "1996 - 2022 Daniel Stenberg, <daniel@haxx.se>."
/* This is the version number of the libcurl package from which this header
file origins: */
#define LIBCURL_VERSION "7.84.0"
/* The numeric version number is also available "in parts" by using these
defines: */
#define LIBCURL_VERSION_MAJOR 7
#define LIBCURL_VERSION_MINOR 84
#define LIBCURL_VERSION_PATCH 0
/* This is the numeric version of the libcurl version number, meant for easier
parsing and comparisons by programs. The LIBCURL_VERSION_NUM define will
always follow this syntax:
0xXXYYZZ
Where XX, YY and ZZ are the main version, release and patch numbers in
hexadecimal (using 8 bits each). All three numbers are always represented
using two digits. 1.2 would appear as "0x010200" while version 9.11.7
appears as "0x090b07".
This 6-digit (24 bits) hexadecimal number does not show pre-release number,
and it is always a greater number in a more recent release. It makes
comparisons with greater than and less than work.
Note: This define is the full hex number and _does not_ use the
CURL_VERSION_BITS() macro since curl's own configure script greps for it
and needs it to contain the full number.
*/
#define LIBCURL_VERSION_NUM 0x075400
/*
* This is the date and time when the full source package was created. The
* timestamp is not stored in git, as the timestamp is properly set in the
* tarballs by the maketgz script.
*
* The format of the date follows this template:
*
* "2007-11-23"
*/
#define LIBCURL_TIMESTAMP "2022-06-27"
#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z))
#define CURL_AT_LEAST_VERSION(x,y,z) \
(LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z))
#endif /* CURLINC_CURLVER_H */

@ -0,0 +1,125 @@
#ifndef CURLINC_EASY_H
#define CURLINC_EASY_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/* Flag bits in the curl_blob struct: */
#define CURL_BLOB_COPY 1 /* tell libcurl to copy the data */
#define CURL_BLOB_NOCOPY 0 /* tell libcurl to NOT copy the data */
struct curl_blob {
void *data;
size_t len;
unsigned int flags; /* bit 0 is defined, the rest are reserved and should be
left zeroes */
};
CURL_EXTERN CURL *curl_easy_init(void);
CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
CURL_EXTERN CURLcode curl_easy_perform(CURL *curl);
CURL_EXTERN void curl_easy_cleanup(CURL *curl);
/*
* NAME curl_easy_getinfo()
*
* DESCRIPTION
*
* Request internal information from the curl session with this function. The
* third argument MUST be a pointer to a long, a pointer to a char * or a
* pointer to a double (as the documentation describes elsewhere). The data
* pointed to will be filled in accordingly and can be relied upon only if the
* function returns CURLE_OK. This function is intended to get used *AFTER* a
* performed transfer, all results from this function are undefined until the
* transfer is completed.
*/
CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...);
/*
* NAME curl_easy_duphandle()
*
* DESCRIPTION
*
* Creates a new curl session handle with the same options set for the handle
* passed in. Duplicating a handle could only be a matter of cloning data and
* options, internal state info and things like persistent connections cannot
* be transferred. It is useful in multithreaded applications when you can run
* curl_easy_duphandle() for each new thread to avoid a series of identical
* curl_easy_setopt() invokes in every thread.
*/
CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl);
/*
* NAME curl_easy_reset()
*
* DESCRIPTION
*
* Re-initializes a CURL handle to the default values. This puts back the
* handle to the same state as it was in when it was just created.
*
* It does keep: live connections, the Session ID cache, the DNS cache and the
* cookies.
*/
CURL_EXTERN void curl_easy_reset(CURL *curl);
/*
* NAME curl_easy_recv()
*
* DESCRIPTION
*
* Receives data from the connected socket. Use after successful
* curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
*/
CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen,
size_t *n);
/*
* NAME curl_easy_send()
*
* DESCRIPTION
*
* Sends data over the connected socket. Use after successful
* curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
*/
CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer,
size_t buflen, size_t *n);
/*
* NAME curl_easy_upkeep()
*
* DESCRIPTION
*
* Performs connection upkeep for the given session handle.
*/
CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl);
#ifdef __cplusplus
}
#endif
#endif

@ -0,0 +1,66 @@
#ifndef CURLINC_HEADER_H
#define CURLINC_HEADER_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 2018 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
struct curl_header {
char *name; /* this might not use the same case */
char *value;
size_t amount; /* number of headers using this name */
size_t index; /* ... of this instance, 0 or higher */
unsigned int origin; /* see bits below */
void *anchor; /* handle privately used by libcurl */
};
/* 'origin' bits */
#define CURLH_HEADER (1<<0) /* plain server header */
#define CURLH_TRAILER (1<<1) /* trailers */
#define CURLH_CONNECT (1<<2) /* CONNECT headers */
#define CURLH_1XX (1<<3) /* 1xx headers */
#define CURLH_PSEUDO (1<<4) /* pseudo headers */
typedef enum {
CURLHE_OK,
CURLHE_BADINDEX, /* header exists but not with this index */
CURLHE_MISSING, /* no such header exists */
CURLHE_NOHEADERS, /* no headers at all exist (yet) */
CURLHE_NOREQUEST, /* no request with this number was used */
CURLHE_OUT_OF_MEMORY, /* out of memory while processing */
CURLHE_BAD_ARGUMENT, /* a function argument was not okay */
CURLHE_NOT_BUILT_IN /* if API was disabled in the build */
} CURLHcode;
CURL_EXTERN CURLHcode curl_easy_header(CURL *easy,
const char *name,
size_t index,
unsigned int origin,
int request,
struct curl_header **hout);
CURL_EXTERN struct curl_header *curl_easy_nextheader(CURL *easy,
unsigned int origin,
int request,
struct curl_header *prev);
#endif /* CURLINC_HEADER_H */

@ -0,0 +1,52 @@
#ifndef CURLINC_MPRINTF_H
#define CURLINC_MPRINTF_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
#include <stdarg.h>
#include <stdio.h> /* needed for FILE */
#include "curl.h" /* for CURL_EXTERN */
#ifdef __cplusplus
extern "C" {
#endif
CURL_EXTERN int curl_mprintf(const char *format, ...);
CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...);
CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...);
CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength,
const char *format, ...);
CURL_EXTERN int curl_mvprintf(const char *format, va_list args);
CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args);
CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args);
CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength,
const char *format, va_list args);
CURL_EXTERN char *curl_maprintf(const char *format, ...);
CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args);
#ifdef __cplusplus
}
#endif
#endif /* CURLINC_MPRINTF_H */

@ -0,0 +1,460 @@
#ifndef CURLINC_MULTI_H
#define CURLINC_MULTI_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
/*
This is an "external" header file. Don't give away any internals here!
GOALS
o Enable a "pull" interface. The application that uses libcurl decides where
and when to ask libcurl to get/send data.
o Enable multiple simultaneous transfers in the same thread without making it
complicated for the application.
o Enable the application to select() on its own file descriptors and curl's
file descriptors simultaneous easily.
*/
/*
* This header file should not really need to include "curl.h" since curl.h
* itself includes this file and we expect user applications to do #include
* <curl/curl.h> without the need for especially including multi.h.
*
* For some reason we added this include here at one point, and rather than to
* break existing (wrongly written) libcurl applications, we leave it as-is
* but with this warning attached.
*/
#include "curl.h"
#ifdef __cplusplus
extern "C" {
#endif
#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER)
typedef struct Curl_multi CURLM;
#else
typedef void CURLM;
#endif
typedef enum {
CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or
curl_multi_socket*() soon */
CURLM_OK,
CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */
CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */
CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */
CURLM_INTERNAL_ERROR, /* this is a libcurl bug */
CURLM_BAD_SOCKET, /* the passed in socket argument did not match */
CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */
CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was
attempted to get added - again */
CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a
callback */
CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */
CURLM_BAD_FUNCTION_ARGUMENT, /* function called with a bad parameter */
CURLM_ABORTED_BY_CALLBACK,
CURLM_UNRECOVERABLE_POLL,
CURLM_LAST
} CURLMcode;
/* just to make code nicer when using curl_multi_socket() you can now check
for CURLM_CALL_MULTI_SOCKET too in the same style it works for
curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */
#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM
/* bitmask bits for CURLMOPT_PIPELINING */
#define CURLPIPE_NOTHING 0L
#define CURLPIPE_HTTP1 1L
#define CURLPIPE_MULTIPLEX 2L
typedef enum {
CURLMSG_NONE, /* first, not used */
CURLMSG_DONE, /* This easy handle has completed. 'result' contains
the CURLcode of the transfer */
CURLMSG_LAST /* last, not used */
} CURLMSG;
struct CURLMsg {
CURLMSG msg; /* what this message means */
CURL *easy_handle; /* the handle it concerns */
union {
void *whatever; /* message-specific data */
CURLcode result; /* return code for transfer */
} data;
};
typedef struct CURLMsg CURLMsg;
/* Based on poll(2) structure and values.
* We don't use pollfd and POLL* constants explicitly
* to cover platforms without poll(). */
#define CURL_WAIT_POLLIN 0x0001
#define CURL_WAIT_POLLPRI 0x0002
#define CURL_WAIT_POLLOUT 0x0004
struct curl_waitfd {
curl_socket_t fd;
short events;
short revents; /* not supported yet */
};
/*
* Name: curl_multi_init()
*
* Desc: inititalize multi-style curl usage
*
* Returns: a new CURLM handle to use in all 'curl_multi' functions.
*/
CURL_EXTERN CURLM *curl_multi_init(void);
/*
* Name: curl_multi_add_handle()
*
* Desc: add a standard curl handle to the multi stack
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle,
CURL *curl_handle);
/*
* Name: curl_multi_remove_handle()
*
* Desc: removes a curl handle from the multi stack again
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
CURL *curl_handle);
/*
* Name: curl_multi_fdset()
*
* Desc: Ask curl for its fd_set sets. The app can use these to select() or
* poll() on. We want curl_multi_perform() called as soon as one of
* them are ready.
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle,
fd_set *read_fd_set,
fd_set *write_fd_set,
fd_set *exc_fd_set,
int *max_fd);
/*
* Name: curl_multi_wait()
*
* Desc: Poll on all fds within a CURLM set as well as any
* additional fds passed to the function.
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle,
struct curl_waitfd extra_fds[],
unsigned int extra_nfds,
int timeout_ms,
int *ret);
/*
* Name: curl_multi_poll()
*
* Desc: Poll on all fds within a CURLM set as well as any
* additional fds passed to the function.
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle,
struct curl_waitfd extra_fds[],
unsigned int extra_nfds,
int timeout_ms,
int *ret);
/*
* Name: curl_multi_wakeup()
*
* Desc: wakes up a sleeping curl_multi_poll call.
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_wakeup(CURLM *multi_handle);
/*
* Name: curl_multi_perform()
*
* Desc: When the app thinks there's data available for curl it calls this
* function to read/write whatever there is right now. This returns
* as soon as the reads and writes are done. This function does not
* require that there actually is data available for reading or that
* data can be written, it can be called just in case. It returns
* the number of handles that still transfer data in the second
* argument's integer-pointer.
*
* Returns: CURLMcode type, general multi error code. *NOTE* that this only
* returns errors etc regarding the whole multi stack. There might
* still have occurred problems on individual transfers even when
* this returns OK.
*/
CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle,
int *running_handles);
/*
* Name: curl_multi_cleanup()
*
* Desc: Cleans up and removes a whole multi stack. It does not free or
* touch any individual easy handles in any way. We need to define
* in what state those handles will be if this function is called
* in the middle of a transfer.
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle);
/*
* Name: curl_multi_info_read()
*
* Desc: Ask the multi handle if there's any messages/informationals from
* the individual transfers. Messages include informationals such as
* error code from the transfer or just the fact that a transfer is
* completed. More details on these should be written down as well.
*
* Repeated calls to this function will return a new struct each
* time, until a special "end of msgs" struct is returned as a signal
* that there is no more to get at this point.
*
* The data the returned pointer points to will not survive calling
* curl_multi_cleanup().
*
* The 'CURLMsg' struct is meant to be very simple and only contain
* very basic information. If more involved information is wanted,
* we will provide the particular "transfer handle" in that struct
* and that should/could/would be used in subsequent
* curl_easy_getinfo() calls (or similar). The point being that we
* must never expose complex structs to applications, as then we'll
* undoubtably get backwards compatibility problems in the future.
*
* Returns: A pointer to a filled-in struct, or NULL if it failed or ran out
* of structs. It also writes the number of messages left in the
* queue (after this read) in the integer the second argument points
* to.
*/
CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle,
int *msgs_in_queue);
/*
* Name: curl_multi_strerror()
*
* Desc: The curl_multi_strerror function may be used to turn a CURLMcode
* value into the equivalent human readable error string. This is
* useful for printing meaningful error messages.
*
* Returns: A pointer to a null-terminated error message.
*/
CURL_EXTERN const char *curl_multi_strerror(CURLMcode);
/*
* Name: curl_multi_socket() and
* curl_multi_socket_all()
*
* Desc: An alternative version of curl_multi_perform() that allows the
* application to pass in one of the file descriptors that have been
* detected to have "action" on them and let libcurl perform.
* See man page for details.
*/
#define CURL_POLL_NONE 0
#define CURL_POLL_IN 1
#define CURL_POLL_OUT 2
#define CURL_POLL_INOUT 3
#define CURL_POLL_REMOVE 4
#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD
#define CURL_CSELECT_IN 0x01
#define CURL_CSELECT_OUT 0x02
#define CURL_CSELECT_ERR 0x04
typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */
curl_socket_t s, /* socket */
int what, /* see above */
void *userp, /* private callback
pointer */
void *socketp); /* private socket
pointer */
/*
* Name: curl_multi_timer_callback
*
* Desc: Called by libcurl whenever the library detects a change in the
* maximum number of milliseconds the app is allowed to wait before
* curl_multi_socket() or curl_multi_perform() must be called
* (to allow libcurl's timed events to take place).
*
* Returns: The callback should return zero.
*/
typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */
long timeout_ms, /* see above */
void *userp); /* private callback
pointer */
CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s,
int *running_handles);
CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle,
curl_socket_t s,
int ev_bitmask,
int *running_handles);
CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle,
int *running_handles);
#ifndef CURL_ALLOW_OLD_MULTI_SOCKET
/* This macro below was added in 7.16.3 to push users who recompile to use
the new curl_multi_socket_action() instead of the old curl_multi_socket()
*/
#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z)
#endif
/*
* Name: curl_multi_timeout()
*
* Desc: Returns the maximum number of milliseconds the app is allowed to
* wait before curl_multi_socket() or curl_multi_perform() must be
* called (to allow libcurl's timed events to take place).
*
* Returns: CURLM error code.
*/
CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle,
long *milliseconds);
typedef enum {
/* This is the socket callback function pointer */
CURLOPT(CURLMOPT_SOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 1),
/* This is the argument passed to the socket callback */
CURLOPT(CURLMOPT_SOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 2),
/* set to 1 to enable pipelining for this multi handle */
CURLOPT(CURLMOPT_PIPELINING, CURLOPTTYPE_LONG, 3),
/* This is the timer callback function pointer */
CURLOPT(CURLMOPT_TIMERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 4),
/* This is the argument passed to the timer callback */
CURLOPT(CURLMOPT_TIMERDATA, CURLOPTTYPE_OBJECTPOINT, 5),
/* maximum number of entries in the connection cache */
CURLOPT(CURLMOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 6),
/* maximum number of (pipelining) connections to one host */
CURLOPT(CURLMOPT_MAX_HOST_CONNECTIONS, CURLOPTTYPE_LONG, 7),
/* maximum number of requests in a pipeline */
CURLOPT(CURLMOPT_MAX_PIPELINE_LENGTH, CURLOPTTYPE_LONG, 8),
/* a connection with a content-length longer than this
will not be considered for pipelining */
CURLOPT(CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 9),
/* a connection with a chunk length longer than this
will not be considered for pipelining */
CURLOPT(CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 10),
/* a list of site names(+port) that are blocked from pipelining */
CURLOPT(CURLMOPT_PIPELINING_SITE_BL, CURLOPTTYPE_OBJECTPOINT, 11),
/* a list of server types that are blocked from pipelining */
CURLOPT(CURLMOPT_PIPELINING_SERVER_BL, CURLOPTTYPE_OBJECTPOINT, 12),
/* maximum number of open connections in total */
CURLOPT(CURLMOPT_MAX_TOTAL_CONNECTIONS, CURLOPTTYPE_LONG, 13),
/* This is the server push callback function pointer */
CURLOPT(CURLMOPT_PUSHFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 14),
/* This is the argument passed to the server push callback */
CURLOPT(CURLMOPT_PUSHDATA, CURLOPTTYPE_OBJECTPOINT, 15),
/* maximum number of concurrent streams to support on a connection */
CURLOPT(CURLMOPT_MAX_CONCURRENT_STREAMS, CURLOPTTYPE_LONG, 16),
CURLMOPT_LASTENTRY /* the last unused */
} CURLMoption;
/*
* Name: curl_multi_setopt()
*
* Desc: Sets options for the multi handle.
*
* Returns: CURLM error code.
*/
CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle,
CURLMoption option, ...);
/*
* Name: curl_multi_assign()
*
* Desc: This function sets an association in the multi handle between the
* given socket and a private pointer of the application. This is
* (only) useful for curl_multi_socket uses.
*
* Returns: CURLM error code.
*/
CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle,
curl_socket_t sockfd, void *sockp);
/*
* Name: curl_push_callback
*
* Desc: This callback gets called when a new stream is being pushed by the
* server. It approves or denies the new stream. It can also decide
* to completely fail the connection.
*
* Returns: CURL_PUSH_OK, CURL_PUSH_DENY or CURL_PUSH_ERROROUT
*/
#define CURL_PUSH_OK 0
#define CURL_PUSH_DENY 1
#define CURL_PUSH_ERROROUT 2 /* added in 7.72.0 */
struct curl_pushheaders; /* forward declaration only */
CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h,
size_t num);
CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h,
const char *name);
typedef int (*curl_push_callback)(CURL *parent,
CURL *easy,
size_t num_headers,
struct curl_pushheaders *headers,
void *userp);
#ifdef __cplusplus
} /* end of extern "C" */
#endif
#endif

@ -0,0 +1,70 @@
#ifndef CURLINC_OPTIONS_H
#define CURLINC_OPTIONS_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 2018 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
CURLOT_LONG, /* long (a range of values) */
CURLOT_VALUES, /* (a defined set or bitmask) */
CURLOT_OFF_T, /* curl_off_t (a range of values) */
CURLOT_OBJECT, /* pointer (void *) */
CURLOT_STRING, /* (char * to zero terminated buffer) */
CURLOT_SLIST, /* (struct curl_slist *) */
CURLOT_CBPTR, /* (void * passed as-is to a callback) */
CURLOT_BLOB, /* blob (struct curl_blob *) */
CURLOT_FUNCTION /* function pointer */
} curl_easytype;
/* Flag bits */
/* "alias" means it is provided for old programs to remain functional,
we prefer another name */
#define CURLOT_FLAG_ALIAS (1<<0)
/* The CURLOPTTYPE_* id ranges can still be used to figure out what type/size
to use for curl_easy_setopt() for the given id */
struct curl_easyoption {
const char *name;
CURLoption id;
curl_easytype type;
unsigned int flags;
};
CURL_EXTERN const struct curl_easyoption *
curl_easy_option_by_name(const char *name);
CURL_EXTERN const struct curl_easyoption *
curl_easy_option_by_id(CURLoption id);
CURL_EXTERN const struct curl_easyoption *
curl_easy_option_next(const struct curl_easyoption *prev);
#ifdef __cplusplus
} /* end of extern "C" */
#endif
#endif /* CURLINC_OPTIONS_H */

@ -0,0 +1,35 @@
#ifndef CURLINC_STDCHEADERS_H
#define CURLINC_STDCHEADERS_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
#include <sys/types.h>
size_t fread(void *, size_t, size_t, FILE *);
size_t fwrite(const void *, size_t, size_t, FILE *);
int strcasecmp(const char *, const char *);
int strncasecmp(const char *, const char *, size_t);
#endif /* CURLINC_STDCHEADERS_H */

@ -0,0 +1,490 @@
#ifndef CURLINC_SYSTEM_H
#define CURLINC_SYSTEM_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
/*
* Try to keep one section per platform, compiler and architecture, otherwise,
* if an existing section is reused for a different one and later on the
* original is adjusted, probably the piggybacking one can be adversely
* changed.
*
* In order to differentiate between platforms/compilers/architectures use
* only compiler built in predefined preprocessor symbols.
*
* curl_off_t
* ----------
*
* For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit
* wide signed integral data type. The width of this data type must remain
* constant and independent of any possible large file support settings.
*
* As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit
* wide signed integral data type if there is no 64-bit type.
*
* As a general rule, curl_off_t shall not be mapped to off_t. This rule shall
* only be violated if off_t is the only 64-bit data type available and the
* size of off_t is independent of large file support settings. Keep your
* build on the safe side avoiding an off_t gating. If you have a 64-bit
* off_t then take for sure that another 64-bit data type exists, dig deeper
* and you will find it.
*
*/
#if defined(__DJGPP__) || defined(__GO32__)
# if defined(__DJGPP__) && (__DJGPP__ > 1)
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# else
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__SALFORDC__)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__BORLANDC__)
# if (__BORLANDC__ < 0x520)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# else
# define CURL_TYPEOF_CURL_OFF_T __int64
# define CURL_FORMAT_CURL_OFF_T "I64d"
# define CURL_FORMAT_CURL_OFF_TU "I64u"
# define CURL_SUFFIX_CURL_OFF_T i64
# define CURL_SUFFIX_CURL_OFF_TU ui64
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__TURBOC__)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__POCC__)
# if (__POCC__ < 280)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# elif defined(_MSC_VER)
# define CURL_TYPEOF_CURL_OFF_T __int64
# define CURL_FORMAT_CURL_OFF_T "I64d"
# define CURL_FORMAT_CURL_OFF_TU "I64u"
# define CURL_SUFFIX_CURL_OFF_T i64
# define CURL_SUFFIX_CURL_OFF_TU ui64
# else
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__LCC__)
# if defined(__MCST__) /* MCST eLbrus Compiler Collection */
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
# else /* Local (or Little) C Compiler */
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# define CURL_TYPEOF_CURL_SOCKLEN_T int
# endif
#elif defined(__SYMBIAN32__)
# if defined(__EABI__) /* Treat all ARM compilers equally */
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# elif defined(__CW32__)
# pragma longlong on
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# elif defined(__VC32__)
# define CURL_TYPEOF_CURL_OFF_T __int64
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
#elif defined(__MWERKS__)
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(_WIN32_WCE)
# define CURL_TYPEOF_CURL_OFF_T __int64
# define CURL_FORMAT_CURL_OFF_T "I64d"
# define CURL_FORMAT_CURL_OFF_TU "I64u"
# define CURL_SUFFIX_CURL_OFF_T i64
# define CURL_SUFFIX_CURL_OFF_TU ui64
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__MINGW32__)
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "I64d"
# define CURL_FORMAT_CURL_OFF_TU "I64u"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_WS2TCPIP_H 1
#elif defined(__VMS)
# if defined(__VAX)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# else
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
#elif defined(__OS400__)
# if defined(__ILEC400__)
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
# endif
#elif defined(__MVS__)
# if defined(__IBMC__) || defined(__IBMCPP__)
# if defined(_ILP32)
# elif defined(_LP64)
# endif
# if defined(_LONG_LONG)
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# elif defined(_LP64)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# else
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
# endif
#elif defined(__370__)
# if defined(__IBMC__) || defined(__IBMCPP__)
# if defined(_ILP32)
# elif defined(_LP64)
# endif
# if defined(_LONG_LONG)
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# elif defined(_LP64)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# else
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
# endif
#elif defined(TPF)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__TINYC__) /* also known as tcc */
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */
# if !defined(__LP64) && (defined(__ILP32) || \
defined(__i386) || \
defined(__sparcv8) || \
defined(__sparcv8plus))
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# elif defined(__LP64) || \
defined(__amd64) || defined(__sparcv9)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
#elif defined(__xlc__) /* IBM xlc compiler */
# if !defined(_LP64)
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# else
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
/* ===================================== */
/* KEEP MSVC THE PENULTIMATE ENTRY */
/* ===================================== */
#elif defined(_MSC_VER)
# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
# define CURL_TYPEOF_CURL_OFF_T __int64
# define CURL_FORMAT_CURL_OFF_T "I64d"
# define CURL_FORMAT_CURL_OFF_TU "I64u"
# define CURL_SUFFIX_CURL_OFF_T i64
# define CURL_SUFFIX_CURL_OFF_TU ui64
# else
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T int
/* ===================================== */
/* KEEP GENERIC GCC THE LAST ENTRY */
/* ===================================== */
#elif defined(__GNUC__) && !defined(_SCO_DS)
# if !defined(__LP64__) && \
(defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \
defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \
defined(__sparc__) || defined(__mips__) || defined(__sh__) || \
defined(__XTENSA__) || \
(defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \
(defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L))
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# elif defined(__LP64__) || \
defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \
defined(__e2k__) || \
(defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \
(defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
#else
/* generic "safe guess" on old 32 bit style */
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#endif
#ifdef _AIX
/* AIX needs <sys/poll.h> */
#define CURL_PULL_SYS_POLL_H
#endif
/* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file */
/* ws2tcpip.h is required here to properly make type definitions below. */
#ifdef CURL_PULL_WS2TCPIP_H
# include <winsock2.h>
# include <windows.h>
# include <ws2tcpip.h>
#endif
/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */
/* sys/types.h is required here to properly make type definitions below. */
#ifdef CURL_PULL_SYS_TYPES_H
# include <sys/types.h>
#endif
/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */
/* sys/socket.h is required here to properly make type definitions below. */
#ifdef CURL_PULL_SYS_SOCKET_H
# include <sys/socket.h>
#endif
/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */
/* sys/poll.h is required here to properly make type definitions below. */
#ifdef CURL_PULL_SYS_POLL_H
# include <sys/poll.h>
#endif
/* Data type definition of curl_socklen_t. */
#ifdef CURL_TYPEOF_CURL_SOCKLEN_T
typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t;
#endif
/* Data type definition of curl_off_t. */
#ifdef CURL_TYPEOF_CURL_OFF_T
typedef CURL_TYPEOF_CURL_OFF_T curl_off_t;
#endif
/*
* CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow
* these to be visible and exported by the external libcurl interface API,
* while also making them visible to the library internals, simply including
* curl_setup.h, without actually needing to include curl.h internally.
* If some day this section would grow big enough, all this should be moved
* to its own header file.
*/
/*
* Figure out if we can use the ## preprocessor operator, which is supported
* by ISO/ANSI C and C++. Some compilers support it without setting __STDC__
* or __cplusplus so we need to carefully check for them too.
*/
#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \
defined(__ILEC400__)
/* This compiler is believed to have an ISO compatible preprocessor */
#define CURL_ISOCPP
#else
/* This compiler is believed NOT to have an ISO compatible preprocessor */
#undef CURL_ISOCPP
#endif
/*
* Macros for minimum-width signed and unsigned curl_off_t integer constants.
*/
#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551)
# define CURLINC_OFF_T_C_HLPR2(x) x
# define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x)
# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \
CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T)
# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \
CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU)
#else
# ifdef CURL_ISOCPP
# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix
# else
# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix
# endif
# define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix)
# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T)
# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU)
#endif
#endif /* CURLINC_SYSTEM_H */

@ -0,0 +1,710 @@
#ifndef CURLINC_TYPECHECK_GCC_H
#define CURLINC_TYPECHECK_GCC_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
/* wraps curl_easy_setopt() with typechecking */
/* To add a new kind of warning, add an
* if(curlcheck_sometype_option(_curl_opt))
* if(!curlcheck_sometype(value))
* _curl_easy_setopt_err_sometype();
* block and define curlcheck_sometype_option, curlcheck_sometype and
* _curl_easy_setopt_err_sometype below
*
* NOTE: We use two nested 'if' statements here instead of the && operator, in
* order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x
* when compiling with -Wlogical-op.
*
* To add an option that uses the same type as an existing option, you'll just
* need to extend the appropriate _curl_*_option macro
*/
#define curl_easy_setopt(handle, option, value) \
__extension__({ \
__typeof__(option) _curl_opt = option; \
if(__builtin_constant_p(_curl_opt)) { \
if(curlcheck_long_option(_curl_opt)) \
if(!curlcheck_long(value)) \
_curl_easy_setopt_err_long(); \
if(curlcheck_off_t_option(_curl_opt)) \
if(!curlcheck_off_t(value)) \
_curl_easy_setopt_err_curl_off_t(); \
if(curlcheck_string_option(_curl_opt)) \
if(!curlcheck_string(value)) \
_curl_easy_setopt_err_string(); \
if(curlcheck_write_cb_option(_curl_opt)) \
if(!curlcheck_write_cb(value)) \
_curl_easy_setopt_err_write_callback(); \
if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \
if(!curlcheck_resolver_start_callback(value)) \
_curl_easy_setopt_err_resolver_start_callback(); \
if((_curl_opt) == CURLOPT_READFUNCTION) \
if(!curlcheck_read_cb(value)) \
_curl_easy_setopt_err_read_cb(); \
if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \
if(!curlcheck_ioctl_cb(value)) \
_curl_easy_setopt_err_ioctl_cb(); \
if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \
if(!curlcheck_sockopt_cb(value)) \
_curl_easy_setopt_err_sockopt_cb(); \
if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \
if(!curlcheck_opensocket_cb(value)) \
_curl_easy_setopt_err_opensocket_cb(); \
if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \
if(!curlcheck_progress_cb(value)) \
_curl_easy_setopt_err_progress_cb(); \
if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \
if(!curlcheck_debug_cb(value)) \
_curl_easy_setopt_err_debug_cb(); \
if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \
if(!curlcheck_ssl_ctx_cb(value)) \
_curl_easy_setopt_err_ssl_ctx_cb(); \
if(curlcheck_conv_cb_option(_curl_opt)) \
if(!curlcheck_conv_cb(value)) \
_curl_easy_setopt_err_conv_cb(); \
if((_curl_opt) == CURLOPT_SEEKFUNCTION) \
if(!curlcheck_seek_cb(value)) \
_curl_easy_setopt_err_seek_cb(); \
if(curlcheck_cb_data_option(_curl_opt)) \
if(!curlcheck_cb_data(value)) \
_curl_easy_setopt_err_cb_data(); \
if((_curl_opt) == CURLOPT_ERRORBUFFER) \
if(!curlcheck_error_buffer(value)) \
_curl_easy_setopt_err_error_buffer(); \
if((_curl_opt) == CURLOPT_STDERR) \
if(!curlcheck_FILE(value)) \
_curl_easy_setopt_err_FILE(); \
if(curlcheck_postfields_option(_curl_opt)) \
if(!curlcheck_postfields(value)) \
_curl_easy_setopt_err_postfields(); \
if((_curl_opt) == CURLOPT_HTTPPOST) \
if(!curlcheck_arr((value), struct curl_httppost)) \
_curl_easy_setopt_err_curl_httpost(); \
if((_curl_opt) == CURLOPT_MIMEPOST) \
if(!curlcheck_ptr((value), curl_mime)) \
_curl_easy_setopt_err_curl_mimepost(); \
if(curlcheck_slist_option(_curl_opt)) \
if(!curlcheck_arr((value), struct curl_slist)) \
_curl_easy_setopt_err_curl_slist(); \
if((_curl_opt) == CURLOPT_SHARE) \
if(!curlcheck_ptr((value), CURLSH)) \
_curl_easy_setopt_err_CURLSH(); \
} \
curl_easy_setopt(handle, _curl_opt, value); \
})
/* wraps curl_easy_getinfo() with typechecking */
#define curl_easy_getinfo(handle, info, arg) \
__extension__({ \
__typeof__(info) _curl_info = info; \
if(__builtin_constant_p(_curl_info)) { \
if(curlcheck_string_info(_curl_info)) \
if(!curlcheck_arr((arg), char *)) \
_curl_easy_getinfo_err_string(); \
if(curlcheck_long_info(_curl_info)) \
if(!curlcheck_arr((arg), long)) \
_curl_easy_getinfo_err_long(); \
if(curlcheck_double_info(_curl_info)) \
if(!curlcheck_arr((arg), double)) \
_curl_easy_getinfo_err_double(); \
if(curlcheck_slist_info(_curl_info)) \
if(!curlcheck_arr((arg), struct curl_slist *)) \
_curl_easy_getinfo_err_curl_slist(); \
if(curlcheck_tlssessioninfo_info(_curl_info)) \
if(!curlcheck_arr((arg), struct curl_tlssessioninfo *)) \
_curl_easy_getinfo_err_curl_tlssesssioninfo(); \
if(curlcheck_certinfo_info(_curl_info)) \
if(!curlcheck_arr((arg), struct curl_certinfo *)) \
_curl_easy_getinfo_err_curl_certinfo(); \
if(curlcheck_socket_info(_curl_info)) \
if(!curlcheck_arr((arg), curl_socket_t)) \
_curl_easy_getinfo_err_curl_socket(); \
if(curlcheck_off_t_info(_curl_info)) \
if(!curlcheck_arr((arg), curl_off_t)) \
_curl_easy_getinfo_err_curl_off_t(); \
} \
curl_easy_getinfo(handle, _curl_info, arg); \
})
/*
* For now, just make sure that the functions are called with three arguments
*/
#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param)
#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param)
/* the actual warnings, triggered by calling the _curl_easy_setopt_err*
* functions */
/* To define a new warning, use _CURL_WARNING(identifier, "message") */
#define CURLWARNING(id, message) \
static void __attribute__((__warning__(message))) \
__attribute__((__unused__)) __attribute__((__noinline__)) \
id(void) { __asm__(""); }
CURLWARNING(_curl_easy_setopt_err_long,
"curl_easy_setopt expects a long argument for this option")
CURLWARNING(_curl_easy_setopt_err_curl_off_t,
"curl_easy_setopt expects a curl_off_t argument for this option")
CURLWARNING(_curl_easy_setopt_err_string,
"curl_easy_setopt expects a "
"string ('char *' or char[]) argument for this option"
)
CURLWARNING(_curl_easy_setopt_err_write_callback,
"curl_easy_setopt expects a curl_write_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_resolver_start_callback,
"curl_easy_setopt expects a "
"curl_resolver_start_callback argument for this option"
)
CURLWARNING(_curl_easy_setopt_err_read_cb,
"curl_easy_setopt expects a curl_read_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_ioctl_cb,
"curl_easy_setopt expects a curl_ioctl_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_sockopt_cb,
"curl_easy_setopt expects a curl_sockopt_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_opensocket_cb,
"curl_easy_setopt expects a "
"curl_opensocket_callback argument for this option"
)
CURLWARNING(_curl_easy_setopt_err_progress_cb,
"curl_easy_setopt expects a curl_progress_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_debug_cb,
"curl_easy_setopt expects a curl_debug_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_ssl_ctx_cb,
"curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_conv_cb,
"curl_easy_setopt expects a curl_conv_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_seek_cb,
"curl_easy_setopt expects a curl_seek_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_cb_data,
"curl_easy_setopt expects a "
"private data pointer as argument for this option")
CURLWARNING(_curl_easy_setopt_err_error_buffer,
"curl_easy_setopt expects a "
"char buffer of CURL_ERROR_SIZE as argument for this option")
CURLWARNING(_curl_easy_setopt_err_FILE,
"curl_easy_setopt expects a 'FILE *' argument for this option")
CURLWARNING(_curl_easy_setopt_err_postfields,
"curl_easy_setopt expects a 'void *' or 'char *' argument for this option")
CURLWARNING(_curl_easy_setopt_err_curl_httpost,
"curl_easy_setopt expects a 'struct curl_httppost *' "
"argument for this option")
CURLWARNING(_curl_easy_setopt_err_curl_mimepost,
"curl_easy_setopt expects a 'curl_mime *' "
"argument for this option")
CURLWARNING(_curl_easy_setopt_err_curl_slist,
"curl_easy_setopt expects a 'struct curl_slist *' argument for this option")
CURLWARNING(_curl_easy_setopt_err_CURLSH,
"curl_easy_setopt expects a CURLSH* argument for this option")
CURLWARNING(_curl_easy_getinfo_err_string,
"curl_easy_getinfo expects a pointer to 'char *' for this info")
CURLWARNING(_curl_easy_getinfo_err_long,
"curl_easy_getinfo expects a pointer to long for this info")
CURLWARNING(_curl_easy_getinfo_err_double,
"curl_easy_getinfo expects a pointer to double for this info")
CURLWARNING(_curl_easy_getinfo_err_curl_slist,
"curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info")
CURLWARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo,
"curl_easy_getinfo expects a pointer to "
"'struct curl_tlssessioninfo *' for this info")
CURLWARNING(_curl_easy_getinfo_err_curl_certinfo,
"curl_easy_getinfo expects a pointer to "
"'struct curl_certinfo *' for this info")
CURLWARNING(_curl_easy_getinfo_err_curl_socket,
"curl_easy_getinfo expects a pointer to curl_socket_t for this info")
CURLWARNING(_curl_easy_getinfo_err_curl_off_t,
"curl_easy_getinfo expects a pointer to curl_off_t for this info")
/* groups of curl_easy_setops options that take the same type of argument */
/* To add a new option to one of the groups, just add
* (option) == CURLOPT_SOMETHING
* to the or-expression. If the option takes a long or curl_off_t, you don't
* have to do anything
*/
/* evaluates to true if option takes a long argument */
#define curlcheck_long_option(option) \
(0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT)
#define curlcheck_off_t_option(option) \
(((option) > CURLOPTTYPE_OFF_T) && ((option) < CURLOPTTYPE_BLOB))
/* evaluates to true if option takes a char* argument */
#define curlcheck_string_option(option) \
((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \
(option) == CURLOPT_ACCEPT_ENCODING || \
(option) == CURLOPT_ALTSVC || \
(option) == CURLOPT_CAINFO || \
(option) == CURLOPT_CAPATH || \
(option) == CURLOPT_COOKIE || \
(option) == CURLOPT_COOKIEFILE || \
(option) == CURLOPT_COOKIEJAR || \
(option) == CURLOPT_COOKIELIST || \
(option) == CURLOPT_CRLFILE || \
(option) == CURLOPT_CUSTOMREQUEST || \
(option) == CURLOPT_DEFAULT_PROTOCOL || \
(option) == CURLOPT_DNS_INTERFACE || \
(option) == CURLOPT_DNS_LOCAL_IP4 || \
(option) == CURLOPT_DNS_LOCAL_IP6 || \
(option) == CURLOPT_DNS_SERVERS || \
(option) == CURLOPT_DOH_URL || \
(option) == CURLOPT_EGDSOCKET || \
(option) == CURLOPT_FTPPORT || \
(option) == CURLOPT_FTP_ACCOUNT || \
(option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \
(option) == CURLOPT_HSTS || \
(option) == CURLOPT_INTERFACE || \
(option) == CURLOPT_ISSUERCERT || \
(option) == CURLOPT_KEYPASSWD || \
(option) == CURLOPT_KRBLEVEL || \
(option) == CURLOPT_LOGIN_OPTIONS || \
(option) == CURLOPT_MAIL_AUTH || \
(option) == CURLOPT_MAIL_FROM || \
(option) == CURLOPT_NETRC_FILE || \
(option) == CURLOPT_NOPROXY || \
(option) == CURLOPT_PASSWORD || \
(option) == CURLOPT_PINNEDPUBLICKEY || \
(option) == CURLOPT_PRE_PROXY || \
(option) == CURLOPT_PROXY || \
(option) == CURLOPT_PROXYPASSWORD || \
(option) == CURLOPT_PROXYUSERNAME || \
(option) == CURLOPT_PROXYUSERPWD || \
(option) == CURLOPT_PROXY_CAINFO || \
(option) == CURLOPT_PROXY_CAPATH || \
(option) == CURLOPT_PROXY_CRLFILE || \
(option) == CURLOPT_PROXY_ISSUERCERT || \
(option) == CURLOPT_PROXY_KEYPASSWD || \
(option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \
(option) == CURLOPT_PROXY_SERVICE_NAME || \
(option) == CURLOPT_PROXY_SSLCERT || \
(option) == CURLOPT_PROXY_SSLCERTTYPE || \
(option) == CURLOPT_PROXY_SSLKEY || \
(option) == CURLOPT_PROXY_SSLKEYTYPE || \
(option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \
(option) == CURLOPT_PROXY_TLS13_CIPHERS || \
(option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \
(option) == CURLOPT_PROXY_TLSAUTH_TYPE || \
(option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \
(option) == CURLOPT_RANDOM_FILE || \
(option) == CURLOPT_RANGE || \
(option) == CURLOPT_REFERER || \
(option) == CURLOPT_REQUEST_TARGET || \
(option) == CURLOPT_RTSP_SESSION_ID || \
(option) == CURLOPT_RTSP_STREAM_URI || \
(option) == CURLOPT_RTSP_TRANSPORT || \
(option) == CURLOPT_SASL_AUTHZID || \
(option) == CURLOPT_SERVICE_NAME || \
(option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \
(option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \
(option) == CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 || \
(option) == CURLOPT_SSH_KNOWNHOSTS || \
(option) == CURLOPT_SSH_PRIVATE_KEYFILE || \
(option) == CURLOPT_SSH_PUBLIC_KEYFILE || \
(option) == CURLOPT_SSLCERT || \
(option) == CURLOPT_SSLCERTTYPE || \
(option) == CURLOPT_SSLENGINE || \
(option) == CURLOPT_SSLKEY || \
(option) == CURLOPT_SSLKEYTYPE || \
(option) == CURLOPT_SSL_CIPHER_LIST || \
(option) == CURLOPT_TLS13_CIPHERS || \
(option) == CURLOPT_TLSAUTH_PASSWORD || \
(option) == CURLOPT_TLSAUTH_TYPE || \
(option) == CURLOPT_TLSAUTH_USERNAME || \
(option) == CURLOPT_UNIX_SOCKET_PATH || \
(option) == CURLOPT_URL || \
(option) == CURLOPT_USERAGENT || \
(option) == CURLOPT_USERNAME || \
(option) == CURLOPT_AWS_SIGV4 || \
(option) == CURLOPT_USERPWD || \
(option) == CURLOPT_XOAUTH2_BEARER || \
(option) == CURLOPT_SSL_EC_CURVES || \
0)
/* evaluates to true if option takes a curl_write_callback argument */
#define curlcheck_write_cb_option(option) \
((option) == CURLOPT_HEADERFUNCTION || \
(option) == CURLOPT_WRITEFUNCTION)
/* evaluates to true if option takes a curl_conv_callback argument */
#define curlcheck_conv_cb_option(option) \
((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \
(option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \
(option) == CURLOPT_CONV_FROM_UTF8_FUNCTION)
/* evaluates to true if option takes a data argument to pass to a callback */
#define curlcheck_cb_data_option(option) \
((option) == CURLOPT_CHUNK_DATA || \
(option) == CURLOPT_CLOSESOCKETDATA || \
(option) == CURLOPT_DEBUGDATA || \
(option) == CURLOPT_FNMATCH_DATA || \
(option) == CURLOPT_HEADERDATA || \
(option) == CURLOPT_HSTSREADDATA || \
(option) == CURLOPT_HSTSWRITEDATA || \
(option) == CURLOPT_INTERLEAVEDATA || \
(option) == CURLOPT_IOCTLDATA || \
(option) == CURLOPT_OPENSOCKETDATA || \
(option) == CURLOPT_PREREQDATA || \
(option) == CURLOPT_PROGRESSDATA || \
(option) == CURLOPT_READDATA || \
(option) == CURLOPT_SEEKDATA || \
(option) == CURLOPT_SOCKOPTDATA || \
(option) == CURLOPT_SSH_KEYDATA || \
(option) == CURLOPT_SSL_CTX_DATA || \
(option) == CURLOPT_WRITEDATA || \
(option) == CURLOPT_RESOLVER_START_DATA || \
(option) == CURLOPT_TRAILERDATA || \
(option) == CURLOPT_SSH_HOSTKEYDATA || \
0)
/* evaluates to true if option takes a POST data argument (void* or char*) */
#define curlcheck_postfields_option(option) \
((option) == CURLOPT_POSTFIELDS || \
(option) == CURLOPT_COPYPOSTFIELDS || \
0)
/* evaluates to true if option takes a struct curl_slist * argument */
#define curlcheck_slist_option(option) \
((option) == CURLOPT_HTTP200ALIASES || \
(option) == CURLOPT_HTTPHEADER || \
(option) == CURLOPT_MAIL_RCPT || \
(option) == CURLOPT_POSTQUOTE || \
(option) == CURLOPT_PREQUOTE || \
(option) == CURLOPT_PROXYHEADER || \
(option) == CURLOPT_QUOTE || \
(option) == CURLOPT_RESOLVE || \
(option) == CURLOPT_TELNETOPTIONS || \
(option) == CURLOPT_CONNECT_TO || \
0)
/* groups of curl_easy_getinfo infos that take the same type of argument */
/* evaluates to true if info expects a pointer to char * argument */
#define curlcheck_string_info(info) \
(CURLINFO_STRING < (info) && (info) < CURLINFO_LONG && \
(info) != CURLINFO_PRIVATE)
/* evaluates to true if info expects a pointer to long argument */
#define curlcheck_long_info(info) \
(CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE)
/* evaluates to true if info expects a pointer to double argument */
#define curlcheck_double_info(info) \
(CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST)
/* true if info expects a pointer to struct curl_slist * argument */
#define curlcheck_slist_info(info) \
(((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST))
/* true if info expects a pointer to struct curl_tlssessioninfo * argument */
#define curlcheck_tlssessioninfo_info(info) \
(((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION))
/* true if info expects a pointer to struct curl_certinfo * argument */
#define curlcheck_certinfo_info(info) ((info) == CURLINFO_CERTINFO)
/* true if info expects a pointer to struct curl_socket_t argument */
#define curlcheck_socket_info(info) \
(CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T)
/* true if info expects a pointer to curl_off_t argument */
#define curlcheck_off_t_info(info) \
(CURLINFO_OFF_T < (info))
/* typecheck helpers -- check whether given expression has requested type*/
/* For pointers, you can use the curlcheck_ptr/curlcheck_arr macros,
* otherwise define a new macro. Search for __builtin_types_compatible_p
* in the GCC manual.
* NOTE: these macros MUST NOT EVALUATE their arguments! The argument is
* the actual expression passed to the curl_easy_setopt macro. This
* means that you can only apply the sizeof and __typeof__ operators, no
* == or whatsoever.
*/
/* XXX: should evaluate to true if expr is a pointer */
#define curlcheck_any_ptr(expr) \
(sizeof(expr) == sizeof(void *))
/* evaluates to true if expr is NULL */
/* XXX: must not evaluate expr, so this check is not accurate */
#define curlcheck_NULL(expr) \
(__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL)))
/* evaluates to true if expr is type*, const type* or NULL */
#define curlcheck_ptr(expr, type) \
(curlcheck_NULL(expr) || \
__builtin_types_compatible_p(__typeof__(expr), type *) || \
__builtin_types_compatible_p(__typeof__(expr), const type *))
/* evaluates to true if expr is one of type[], type*, NULL or const type* */
#define curlcheck_arr(expr, type) \
(curlcheck_ptr((expr), type) || \
__builtin_types_compatible_p(__typeof__(expr), type []))
/* evaluates to true if expr is a string */
#define curlcheck_string(expr) \
(curlcheck_arr((expr), char) || \
curlcheck_arr((expr), signed char) || \
curlcheck_arr((expr), unsigned char))
/* evaluates to true if expr is a long (no matter the signedness)
* XXX: for now, int is also accepted (and therefore short and char, which
* are promoted to int when passed to a variadic function) */
#define curlcheck_long(expr) \
(__builtin_types_compatible_p(__typeof__(expr), long) || \
__builtin_types_compatible_p(__typeof__(expr), signed long) || \
__builtin_types_compatible_p(__typeof__(expr), unsigned long) || \
__builtin_types_compatible_p(__typeof__(expr), int) || \
__builtin_types_compatible_p(__typeof__(expr), signed int) || \
__builtin_types_compatible_p(__typeof__(expr), unsigned int) || \
__builtin_types_compatible_p(__typeof__(expr), short) || \
__builtin_types_compatible_p(__typeof__(expr), signed short) || \
__builtin_types_compatible_p(__typeof__(expr), unsigned short) || \
__builtin_types_compatible_p(__typeof__(expr), char) || \
__builtin_types_compatible_p(__typeof__(expr), signed char) || \
__builtin_types_compatible_p(__typeof__(expr), unsigned char))
/* evaluates to true if expr is of type curl_off_t */
#define curlcheck_off_t(expr) \
(__builtin_types_compatible_p(__typeof__(expr), curl_off_t))
/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */
/* XXX: also check size of an char[] array? */
#define curlcheck_error_buffer(expr) \
(curlcheck_NULL(expr) || \
__builtin_types_compatible_p(__typeof__(expr), char *) || \
__builtin_types_compatible_p(__typeof__(expr), char[]))
/* evaluates to true if expr is of type (const) void* or (const) FILE* */
#if 0
#define curlcheck_cb_data(expr) \
(curlcheck_ptr((expr), void) || \
curlcheck_ptr((expr), FILE))
#else /* be less strict */
#define curlcheck_cb_data(expr) \
curlcheck_any_ptr(expr)
#endif
/* evaluates to true if expr is of type FILE* */
#define curlcheck_FILE(expr) \
(curlcheck_NULL(expr) || \
(__builtin_types_compatible_p(__typeof__(expr), FILE *)))
/* evaluates to true if expr can be passed as POST data (void* or char*) */
#define curlcheck_postfields(expr) \
(curlcheck_ptr((expr), void) || \
curlcheck_arr((expr), char) || \
curlcheck_arr((expr), unsigned char))
/* helper: __builtin_types_compatible_p distinguishes between functions and
* function pointers, hide it */
#define curlcheck_cb_compatible(func, type) \
(__builtin_types_compatible_p(__typeof__(func), type) || \
__builtin_types_compatible_p(__typeof__(func) *, type))
/* evaluates to true if expr is of type curl_resolver_start_callback */
#define curlcheck_resolver_start_callback(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_resolver_start_callback))
/* evaluates to true if expr is of type curl_read_callback or "similar" */
#define curlcheck_read_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), __typeof__(fread) *) || \
curlcheck_cb_compatible((expr), curl_read_callback) || \
curlcheck_cb_compatible((expr), _curl_read_callback1) || \
curlcheck_cb_compatible((expr), _curl_read_callback2) || \
curlcheck_cb_compatible((expr), _curl_read_callback3) || \
curlcheck_cb_compatible((expr), _curl_read_callback4) || \
curlcheck_cb_compatible((expr), _curl_read_callback5) || \
curlcheck_cb_compatible((expr), _curl_read_callback6))
typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *);
typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *);
typedef size_t (*_curl_read_callback3)(char *, size_t, size_t, FILE *);
typedef size_t (*_curl_read_callback4)(void *, size_t, size_t, void *);
typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *);
typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *);
/* evaluates to true if expr is of type curl_write_callback or "similar" */
#define curlcheck_write_cb(expr) \
(curlcheck_read_cb(expr) || \
curlcheck_cb_compatible((expr), __typeof__(fwrite) *) || \
curlcheck_cb_compatible((expr), curl_write_callback) || \
curlcheck_cb_compatible((expr), _curl_write_callback1) || \
curlcheck_cb_compatible((expr), _curl_write_callback2) || \
curlcheck_cb_compatible((expr), _curl_write_callback3) || \
curlcheck_cb_compatible((expr), _curl_write_callback4) || \
curlcheck_cb_compatible((expr), _curl_write_callback5) || \
curlcheck_cb_compatible((expr), _curl_write_callback6))
typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *);
typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t,
const void *);
typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *);
typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *);
typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t,
const void *);
typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *);
/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */
#define curlcheck_ioctl_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_ioctl_callback) || \
curlcheck_cb_compatible((expr), _curl_ioctl_callback1) || \
curlcheck_cb_compatible((expr), _curl_ioctl_callback2) || \
curlcheck_cb_compatible((expr), _curl_ioctl_callback3) || \
curlcheck_cb_compatible((expr), _curl_ioctl_callback4))
typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *);
typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *);
typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *);
typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *);
/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */
#define curlcheck_sockopt_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_sockopt_callback) || \
curlcheck_cb_compatible((expr), _curl_sockopt_callback1) || \
curlcheck_cb_compatible((expr), _curl_sockopt_callback2))
typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype);
typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t,
curlsocktype);
/* evaluates to true if expr is of type curl_opensocket_callback or
"similar" */
#define curlcheck_opensocket_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_opensocket_callback) || \
curlcheck_cb_compatible((expr), _curl_opensocket_callback1) || \
curlcheck_cb_compatible((expr), _curl_opensocket_callback2) || \
curlcheck_cb_compatible((expr), _curl_opensocket_callback3) || \
curlcheck_cb_compatible((expr), _curl_opensocket_callback4))
typedef curl_socket_t (*_curl_opensocket_callback1)
(void *, curlsocktype, struct curl_sockaddr *);
typedef curl_socket_t (*_curl_opensocket_callback2)
(void *, curlsocktype, const struct curl_sockaddr *);
typedef curl_socket_t (*_curl_opensocket_callback3)
(const void *, curlsocktype, struct curl_sockaddr *);
typedef curl_socket_t (*_curl_opensocket_callback4)
(const void *, curlsocktype, const struct curl_sockaddr *);
/* evaluates to true if expr is of type curl_progress_callback or "similar" */
#define curlcheck_progress_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_progress_callback) || \
curlcheck_cb_compatible((expr), _curl_progress_callback1) || \
curlcheck_cb_compatible((expr), _curl_progress_callback2))
typedef int (*_curl_progress_callback1)(void *,
double, double, double, double);
typedef int (*_curl_progress_callback2)(const void *,
double, double, double, double);
/* evaluates to true if expr is of type curl_debug_callback or "similar" */
#define curlcheck_debug_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_debug_callback) || \
curlcheck_cb_compatible((expr), _curl_debug_callback1) || \
curlcheck_cb_compatible((expr), _curl_debug_callback2) || \
curlcheck_cb_compatible((expr), _curl_debug_callback3) || \
curlcheck_cb_compatible((expr), _curl_debug_callback4) || \
curlcheck_cb_compatible((expr), _curl_debug_callback5) || \
curlcheck_cb_compatible((expr), _curl_debug_callback6) || \
curlcheck_cb_compatible((expr), _curl_debug_callback7) || \
curlcheck_cb_compatible((expr), _curl_debug_callback8))
typedef int (*_curl_debug_callback1) (CURL *,
curl_infotype, char *, size_t, void *);
typedef int (*_curl_debug_callback2) (CURL *,
curl_infotype, char *, size_t, const void *);
typedef int (*_curl_debug_callback3) (CURL *,
curl_infotype, const char *, size_t, void *);
typedef int (*_curl_debug_callback4) (CURL *,
curl_infotype, const char *, size_t, const void *);
typedef int (*_curl_debug_callback5) (CURL *,
curl_infotype, unsigned char *, size_t, void *);
typedef int (*_curl_debug_callback6) (CURL *,
curl_infotype, unsigned char *, size_t, const void *);
typedef int (*_curl_debug_callback7) (CURL *,
curl_infotype, const unsigned char *, size_t, void *);
typedef int (*_curl_debug_callback8) (CURL *,
curl_infotype, const unsigned char *, size_t, const void *);
/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */
/* this is getting even messier... */
#define curlcheck_ssl_ctx_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_ssl_ctx_callback) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback1) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback2) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback3) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback4) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback5) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback6) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback7) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback8))
typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *);
typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *);
typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *);
typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *,
const void *);
#ifdef HEADER_SSL_H
/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX
* this will of course break if we're included before OpenSSL headers...
*/
typedef CURLcode (*_curl_ssl_ctx_callback5)(CURL *, SSL_CTX *, void *);
typedef CURLcode (*_curl_ssl_ctx_callback6)(CURL *, SSL_CTX *, const void *);
typedef CURLcode (*_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX *, void *);
typedef CURLcode (*_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX *,
const void *);
#else
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5;
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6;
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7;
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8;
#endif
/* evaluates to true if expr is of type curl_conv_callback or "similar" */
#define curlcheck_conv_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_conv_callback) || \
curlcheck_cb_compatible((expr), _curl_conv_callback1) || \
curlcheck_cb_compatible((expr), _curl_conv_callback2) || \
curlcheck_cb_compatible((expr), _curl_conv_callback3) || \
curlcheck_cb_compatible((expr), _curl_conv_callback4))
typedef CURLcode (*_curl_conv_callback1)(char *, size_t length);
typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length);
typedef CURLcode (*_curl_conv_callback3)(void *, size_t length);
typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length);
/* evaluates to true if expr is of type curl_seek_callback or "similar" */
#define curlcheck_seek_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_seek_callback) || \
curlcheck_cb_compatible((expr), _curl_seek_callback1) || \
curlcheck_cb_compatible((expr), _curl_seek_callback2))
typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int);
typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int);
#endif /* CURLINC_TYPECHECK_GCC_H */

@ -0,0 +1,147 @@
#ifndef CURLINC_URLAPI_H
#define CURLINC_URLAPI_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 2018 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
#include "curl.h"
#ifdef __cplusplus
extern "C" {
#endif
/* the error codes for the URL API */
typedef enum {
CURLUE_OK,
CURLUE_BAD_HANDLE, /* 1 */
CURLUE_BAD_PARTPOINTER, /* 2 */
CURLUE_MALFORMED_INPUT, /* 3 */
CURLUE_BAD_PORT_NUMBER, /* 4 */
CURLUE_UNSUPPORTED_SCHEME, /* 5 */
CURLUE_URLDECODE, /* 6 */
CURLUE_OUT_OF_MEMORY, /* 7 */
CURLUE_USER_NOT_ALLOWED, /* 8 */
CURLUE_UNKNOWN_PART, /* 9 */
CURLUE_NO_SCHEME, /* 10 */
CURLUE_NO_USER, /* 11 */
CURLUE_NO_PASSWORD, /* 12 */
CURLUE_NO_OPTIONS, /* 13 */
CURLUE_NO_HOST, /* 14 */
CURLUE_NO_PORT, /* 15 */
CURLUE_NO_QUERY, /* 16 */
CURLUE_NO_FRAGMENT, /* 17 */
CURLUE_NO_ZONEID, /* 18 */
CURLUE_BAD_FILE_URL, /* 19 */
CURLUE_BAD_FRAGMENT, /* 20 */
CURLUE_BAD_HOSTNAME, /* 21 */
CURLUE_BAD_IPV6, /* 22 */
CURLUE_BAD_LOGIN, /* 23 */
CURLUE_BAD_PASSWORD, /* 24 */
CURLUE_BAD_PATH, /* 25 */
CURLUE_BAD_QUERY, /* 26 */
CURLUE_BAD_SCHEME, /* 27 */
CURLUE_BAD_SLASHES, /* 28 */
CURLUE_BAD_USER, /* 29 */
CURLUE_LAST
} CURLUcode;
typedef enum {
CURLUPART_URL,
CURLUPART_SCHEME,
CURLUPART_USER,
CURLUPART_PASSWORD,
CURLUPART_OPTIONS,
CURLUPART_HOST,
CURLUPART_PORT,
CURLUPART_PATH,
CURLUPART_QUERY,
CURLUPART_FRAGMENT,
CURLUPART_ZONEID /* added in 7.65.0 */
} CURLUPart;
#define CURLU_DEFAULT_PORT (1<<0) /* return default port number */
#define CURLU_NO_DEFAULT_PORT (1<<1) /* act as if no port number was set,
if the port number matches the
default for the scheme */
#define CURLU_DEFAULT_SCHEME (1<<2) /* return default scheme if
missing */
#define CURLU_NON_SUPPORT_SCHEME (1<<3) /* allow non-supported scheme */
#define CURLU_PATH_AS_IS (1<<4) /* leave dot sequences */
#define CURLU_DISALLOW_USER (1<<5) /* no user+password allowed */
#define CURLU_URLDECODE (1<<6) /* URL decode on get */
#define CURLU_URLENCODE (1<<7) /* URL encode on set */
#define CURLU_APPENDQUERY (1<<8) /* append a form style part */
#define CURLU_GUESS_SCHEME (1<<9) /* legacy curl-style guessing */
#define CURLU_NO_AUTHORITY (1<<10) /* Allow empty authority when the
scheme is unknown. */
#define CURLU_ALLOW_SPACE (1<<11) /* Allow spaces in the URL */
typedef struct Curl_URL CURLU;
/*
* curl_url() creates a new CURLU handle and returns a pointer to it.
* Must be freed with curl_url_cleanup().
*/
CURL_EXTERN CURLU *curl_url(void);
/*
* curl_url_cleanup() frees the CURLU handle and related resources used for
* the URL parsing. It will not free strings previously returned with the URL
* API.
*/
CURL_EXTERN void curl_url_cleanup(CURLU *handle);
/*
* curl_url_dup() duplicates a CURLU handle and returns a new copy. The new
* handle must also be freed with curl_url_cleanup().
*/
CURL_EXTERN CURLU *curl_url_dup(CURLU *in);
/*
* curl_url_get() extracts a specific part of the URL from a CURLU
* handle. Returns error code. The returned pointer MUST be freed with
* curl_free() afterwards.
*/
CURL_EXTERN CURLUcode curl_url_get(CURLU *handle, CURLUPart what,
char **part, unsigned int flags);
/*
* curl_url_set() sets a specific part of the URL in a CURLU handle. Returns
* error code. The passed in string will be copied. Passing a NULL instead of
* a part string, clears that part.
*/
CURL_EXTERN CURLUcode curl_url_set(CURLU *handle, CURLUPart what,
const char *part, unsigned int flags);
/*
* curl_url_strerror() turns a CURLUcode value into the equivalent human
* readable error string. This is useful for printing meaningful error
* messages.
*/
CURL_EXTERN const char *curl_url_strerror(CURLUcode);
#ifdef __cplusplus
} /* end of extern "C" */
#endif
#endif /* CURLINC_URLAPI_H */

Binary file not shown.

@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "cad2pdf", "cad2pdf\cad2pdf.vbproj", "{B257FD6B-B4D5-4AFC-9110-205237C3B069}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B257FD6B-B4D5-4AFC-9110-205237C3B069}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B257FD6B-B4D5-4AFC-9110-205237C3B069}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B257FD6B-B4D5-4AFC-9110-205237C3B069}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B257FD6B-B4D5-4AFC-9110-205237C3B069}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Binary file not shown.

@ -0,0 +1,30 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
Inherits System.Windows.Forms.Form
'Form Dispose
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Windows
Private components As System.ComponentModel.IContainer
': Windows
'使 Windows
'使
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
components = New System.ComponentModel.Container()
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.Text = "Form1"
End Sub
End Class

@ -0,0 +1,3 @@
Public Class Form1
End Class

@ -0,0 +1,393 @@
'Imports Autodesk.AutoCAD.Interop
'Imports Autodesk.AutoCAD.Interop.Common
'Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Module Module1
Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Public Function FileExist(ByVal strPath As String) As Boolean
FileExist = System.IO.File.Exists(strPath)
End Function
'Sub main()
' Dim acadApp As Autodesk.AutoCAD.Interop.AcadApplication
' Dim acadDoc As Autodesk.AutoCAD.Interop.AcadDocument
' Dim tempDoc As Autodesk.AutoCAD.Interop.AcadDocument
' Dim I As Integer
' Dim isQuit As String
' Dim a_strArgs
' Dim dwgFile As String
' Dim cmd As String
' Dim myOpen As Boolean
' On Error Resume Next
' 'MsgBox(Command$)
' myOpen = False
' a_strArgs = Split(Command$, "@@@@@") '
' For I = LBound(a_strArgs) To UBound(a_strArgs)
' 'MsgBox a_strArgs(i)
' Select Case I
' Case 0
' dwgFile = a_strArgs(I)
' Case 1
' isQuit = a_strArgs(I)
' End Select
' Next
' 'cmd = Trim(Command)
' ' a_strArgs = GetCommandLine(cmd)
' 'For I = 0 To UBound(a_strArgs)
' ' MsgBox (I & ":" & a_strArgs(I))
' ' Next I
' 'MsgBox "dwgfile=" & dwgFile
' 'MsgBox "isquit=" & isQuit
' If isQuit = "open" Then
' acadApp = CreateObject("AutoCAD.Application.18")
' myOpen = True
' If Err.Number > 0 Then
' Exit Sub
' End If
' acadApp.Visible = True
' 'For Each tempDoc In acadApp.Documents
' ' tempDoc.Close(False)
' 'Next
' Else
' acadApp = GetObject(, "AutoCAD.Application.18")
' If Err.Number > 0 Then
' Err.Clear()
' 'MsgBox("未发现acad进程!")
' acadApp = CreateObject("AutoCAD.Application.18")
' myOpen = True
' If Err.Number > 0 Then
' Exit Sub
' End If
' acadApp.Visible = True
' 'For Each tempDoc In acadApp.Documents
' ' tempDoc.Close(False)
' 'Next
' End If
' End If
' 'acadApp = GetObject(, "AutoCAD.Application.18")
' 'If Err.Number > 0 Then
' ' Err.Clear()
' ' 'MsgBox("未发现acad进程!")
' ' acadApp = CreateObject("AutoCAD.Application.18")
' ' myOpen = True
' ' If Err.Number > 0 Then
' ' Exit Sub
' ' End If
' ' acadApp.Visible = True
' ' For Each tempDoc In acadApp.Documents
' ' tempDoc.Close(False)
' ' Next
' 'End If
' '
' acadDoc = acadApp.Documents.Open(dwgFile)
' If Err.Number > 0 Then
' Err.Clear()
' 'MsgBox("打开失败!")
' Exit Sub
' End If
' Sleep(5000)
' '
' 'acadDoc.SetVariable("BACKGROUNDPLOT", 0)
' 'acadDoc.ModelSpace.Layout.RefreshPlotDeviceInfo()
' acadDoc.ModelSpace.Layout.ConfigName = "DWG To PDF.pc3"
' acadDoc.ModelSpace.Layout.StyleSheet = "monochrome.ctb"
' acadDoc.ModelSpace.Layout.PlotType = 1
' acadDoc.ModelSpace.Layout.CenterPlot = True
' acadDoc.ModelSpace.Layout.CanonicalMediaName = "ISO_full_bleed_A4_(297.00_x_210.00_MM)"
' acadDoc.ModelSpace.Layout.PlotRotation = 0 '
' 'acadDoc.ModelSpace.Layout.StandardScale = 0
' acadDoc.ModelSpace.Layout.PlotWithPlotStyles = True
' acadDoc.SetVariable("BACKGROUNDPLOT", 0)
' If InStr(acadDoc.FullName, "dwg") <> 0 Then
' If acadDoc.Plot.PlotToFile(Replace(acadDoc.FullName, ".dwg", ".pdf"), acadDoc.ModelSpace.Layout.ConfigName) Then
' 'Sleep(3000)
' End If
' ElseIf InStr(acadDoc.FullName, "DWG") <> 0 Then
' If acadDoc.Plot.PlotToFile(Replace(acadDoc.FullName, ".DWG", ".pdf"), acadDoc.ModelSpace.Layout.ConfigName) Then
' 'Sleep(3000)
' End If
' End If
' 'acadDoc.Close(False)
' 'acadDoc = Nothing
' If isQuit = "true" Then
' For Each tempDoc In acadApp.Documents
' tempDoc.Close(False)
' Next
' acadApp.Quit()
' acadApp = Nothing
' ElseIf isQuit = "false" Then
' End If
' 'acadDoc = Nothing
' 'If myOpen Then
' ' acadApp.Quit()
' ' acadApp = Nothing
' 'End If
'End Sub
Sub main()
Dim acadApp As Autodesk.AutoCAD.Interop.AcadApplication
Dim acadDoc As Autodesk.AutoCAD.Interop.AcadDocument
Dim tempDoc As Autodesk.AutoCAD.Interop.AcadDocument
Dim I As Integer
Dim isQuit As String
Dim a_strArgs
Dim dwgFile As String
Dim cmd As String
Dim myOpen As Boolean
On Error Resume Next
'MsgBox(Command$)
Dim line As String
Dim dataFile As New System.IO.StreamReader(Command$, System.Text.Encoding.Default)
acadApp = GetObject(, "AutoCAD.Application.18")
If Err.Number > 0 Then
Err.Clear()
'MsgBox("未发现acad进程!")
'acadApp = CreateObject("AutoCAD.Application.18")
'myOpen = True
'If Err.Number > 0 Then
Exit Sub
'End If
acadApp.Visible = True
'For Each tempDoc In acadApp.Documents
' tempDoc.Close(False)
'Next
End If
Dim N As Integer
Do While dataFile.Peek() > 0
line = dataFile.ReadLine()
acadDoc = acadApp.Documents.Open(line)
If Err.Number > 0 Then
Err.Clear()
'MsgBox("打开失败!")
'Exit Sub
End If
N = N + 1
Loop
'Do While dataFile.Peek() > 0
' line = dataFile.ReadLine()
' ' MsgBox(line)
' a_strArgs = Split(line, "@@@@@") '
' For I = LBound(a_strArgs) To UBound(a_strArgs)
' 'MsgBox a_strArgs(i)
' Select Case I
' Case 0
' dwgFile = a_strArgs(I)
' Case 1
' isQuit = a_strArgs(I)
' End Select
' Next
' If isQuit = "open" Then
' acadApp = CreateObject("AutoCAD.Application.18")
' myOpen = True
' If Err.Number > 0 Then
' Exit Sub
' End If
' acadApp.Visible = True
' 'For Each tempDoc In acadApp.Documents
' ' tempDoc.Close(False)
' 'Next
' Else
' acadApp = GetObject(, "AutoCAD.Application.18")
' If Err.Number > 0 Then
' Err.Clear()
' 'MsgBox("未发现acad进程!")
' 'acadApp = CreateObject("AutoCAD.Application.18")
' 'myOpen = True
' 'If Err.Number > 0 Then
' Exit Sub
' 'End If
' acadApp.Visible = True
' 'For Each tempDoc In acadApp.Documents
' ' tempDoc.Close(False)
' 'Next
' End If
' End If
' acadDoc = acadApp.Documents.Open(dwgFile)
' If Err.Number > 0 Then
' Err.Clear()
' 'MsgBox("打开失败!")
' 'Exit Sub
' End If
'Loop
dataFile.Close()
dataFile = Nothing
'myOpen = False
'a_strArgs = Split(Command$, "@@@@@") '
'For I = LBound(a_strArgs) To UBound(a_strArgs)
' 'MsgBox a_strArgs(i)
' Select Case I
' Case 0
' dwgFile = a_strArgs(I)
' Case 1
' isQuit = a_strArgs(I)
' End Select
'Next
'cmd = Trim(Command)
' a_strArgs = GetCommandLine(cmd)
'For I = 0 To UBound(a_strArgs)
' MsgBox (I & ":" & a_strArgs(I))
' Next I
'MsgBox "dwgfile=" & dwgFile
'MsgBox "isquit=" & isQuit
'If isQuit = "open" Then
' acadApp = CreateObject("AutoCAD.Application.18")
' myOpen = True
' If Err.Number > 0 Then
' Exit Sub
' End If
' acadApp.Visible = True
' 'For Each tempDoc In acadApp.Documents
' ' tempDoc.Close(False)
' 'Next
'Else
' acadApp = GetObject(, "AutoCAD.Application.18")
' If Err.Number > 0 Then
' Err.Clear()
' 'MsgBox("未发现acad进程!")
' acadApp = CreateObject("AutoCAD.Application.18")
' myOpen = True
' If Err.Number > 0 Then
' Exit Sub
' End If
' acadApp.Visible = True
' 'For Each tempDoc In acadApp.Documents
' ' tempDoc.Close(False)
' 'Next
' End If
'End If
'acadApp = GetObject(, "AutoCAD.Application.18")
'If Err.Number > 0 Then
' Err.Clear()
' 'MsgBox("未发现acad进程!")
' acadApp = CreateObject("AutoCAD.Application.18")
' myOpen = True
' If Err.Number > 0 Then
' Exit Sub
' End If
' acadApp.Visible = True
' For Each tempDoc In acadApp.Documents
' tempDoc.Close(False)
' Next
'End If
'
'acadDoc = acadApp.Documents.Open(dwgFile)
'If Err.Number > 0 Then
' Err.Clear()
' 'MsgBox("打开失败!")
' Exit Sub
'End If
' Sleep(5000)
If acadApp Is Nothing Then
End If
'
For Each acadDoc In acadApp.Documents
acadDoc.SetVariable("BACKGROUNDPLOT", 0)
acadDoc.ModelSpace.Layout.RefreshPlotDeviceInfo()
acadDoc.ModelSpace.Layout.ConfigName = "DWG To PDF.pc3"
acadDoc.ModelSpace.Layout.StyleSheet = "monochrome.ctb"
acadDoc.ModelSpace.Layout.PlotType = 1
acadDoc.ModelSpace.Layout.CenterPlot = True
acadDoc.ModelSpace.Layout.CanonicalMediaName = "ISO_full_bleed_A4_(297.00_x_210.00_MM)"
acadDoc.ModelSpace.Layout.PlotRotation = 0 '
'acadDoc.ModelSpace.Layout.StandardScale = 0
acadDoc.ModelSpace.Layout.PlotWithPlotStyles = True
acadDoc.SetVariable("BACKGROUNDPLOT", 0)
Dim PdfFile As String
If InStr(acadDoc.FullName, "dwg") <> 0 Then
PdfFile = Replace(acadDoc.FullName, ".dwg", ".pdf")
ElseIf InStr(acadDoc.FullName, "DWG") <> 0 Then
PdfFile = Replace(acadDoc.FullName, ".DWG", ".pdf")
End If
If InStr(acadDoc.FullName, "dwg") <> 0 Then
If acadDoc.Plot.PlotToFile(Replace(acadDoc.FullName, ".dwg", ".pdf"), acadDoc.ModelSpace.Layout.ConfigName) Then
'Sleep(3000)
End If
ElseIf InStr(acadDoc.FullName, "DWG") <> 0 Then
If acadDoc.Plot.PlotToFile(Replace(acadDoc.FullName, ".DWG", ".pdf"), acadDoc.ModelSpace.Layout.ConfigName) Then
'Sleep(3000)
End If
End If
For I = 0 To 5
If FileExist(PdfFile) Then
Exit For
End If
Sleep(1000)
Next
Next
'acadDoc.Close(False)
'acadDoc = Nothing
'If isQuit = "true" Then
' For Each tempDoc In acadApp.Documents
' tempDoc.Close(False)
' Next
' acadApp.Quit()
' acadApp = Nothing
'ElseIf isQuit = "false" Then
'End If
'acadDoc = Nothing
'If myOpen Then
' acadApp.Quit()
' acadApp = Nothing
'End If
End Sub
End Module

@ -0,0 +1,13 @@
'------------------------------------------------------------------------------
' <auto-generated>
'
' :2.0.50727.5420
'
'
'
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>Form1</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<ApplicationType>0</ApplicationType>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
'
'
'
'
<Assembly: AssemblyTitle("cad2pdf")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("Microsoft")>
<Assembly: AssemblyProduct("cad2pdf")>
<Assembly: AssemblyCopyright("Copyright © Microsoft 2014")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
' COM GUID ID
<Assembly: Guid("565829cf-c47e-4cf2-afdf-30aeccfe2666")>
' :
'
'
'
'
'
'
' 使
' 使*:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>

@ -0,0 +1,63 @@
'------------------------------------------------------------------------------
' <auto-generated>
'
' :2.0.50727.5420
'
'
'
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
' StronglyTypedResourceBuilder
' ResGen Visual Studio
' .ResX ResGen
'( /str ) VS
'''<summary>
'''
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' 使 ResourceManager
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("cad2pdf.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' 使
''' 线 CurrentUICulture
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
End Module
End Namespace

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

@ -0,0 +1,73 @@
'------------------------------------------------------------------------------
' <auto-generated>
'
' :2.0.50727.5420
'
'
'
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings)
#Region "My.Settings 自动保存功能"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.cad2pdf.My.MySettings
Get
Return Global.cad2pdf.My.MySettings.Default
End Get
End Property
End Module
End Namespace

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

@ -0,0 +1,196 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{B257FD6B-B4D5-4AFC-9110-205237C3B069}</ProjectGuid>
<OutputType>Exe</OutputType>
<StartupObject>cad2pdf.Module1</StartupObject>
<RootNamespace>cad2pdf</RootNamespace>
<AssemblyName>cad2pdf</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>Console</MyType>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<OptionExplicit>On</OptionExplicit>
<OptionCompare>Binary</OptionCompare>
<OptionStrict>Off</OptionStrict>
<OptionInfer>On</OptionInfer>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>cad2pdf.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>cad2pdf.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Drawing" />
<Import Include="System.Diagnostics" />
<Import Include="System.Windows.Forms" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.vb">
<DependentUpon>Form1.vb</DependentUpon>
<SubType>Form</SubType>
</Compile>
<Compile Include="Module1.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<COMReference Include="AutoCAD">
<Guid>{E072BCE4-9027-4F86-BAE2-EF119FD0A0D3}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
<COMReference Include="AXDBLib">
<Guid>{FFC2A8DB-A497-4087-941C-C5B5462237EA}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
<COMReference Include="stdole">
<Guid>{00020430-0000-0000-C000-000000000046}</Guid>
<VersionMajor>2</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Service References\" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
<Visible>False</Visible>
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
<Visible>False</Visible>
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

@ -0,0 +1,18 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory>
</PublishUrlHistory>
<InstallUrlHistory>
</InstallUrlHistory>
<SupportUrlHistory>
</SupportUrlHistory>
<UpdateUrlHistory>
</UpdateUrlHistory>
<BootstrapperUrlHistory>
</BootstrapperUrlHistory>
<ErrorReportUrlHistory>
</ErrorReportUrlHistory>
<FallbackCulture>zh-CN</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
</PropertyGroup>
</Project>

Binary file not shown.

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type='text/xsl' href='_UpgradeReport_Files/UpgradeReport.xslt'?><UpgradeLog>
<Properties><Property Name="Solution" Value="cad2pdf">
</Property><Property Name="解决方案文件" Value="D:\Work\CONNOR\康华\04 系统实施\cad2pdf\cad2pdf.sln">
</Property><Property Name="用户选项文件" Value="D:\Work\CONNOR\康华\04 系统实施\cad2pdf\cad2pdf.suo">
</Property><Property Name="Date" Value="2018年4月11日">
</Property><Property Name="Time" Value="13:00">
</Property></Properties><Event ErrorLevel="0" Project="" Source="cad2pdf.sln" Description="文件已成功备份为 D:\Work\CONNOR\康华\04 系统实施\cad2pdf\Backup\cad2pdf.sln">
</Event><Event ErrorLevel="0" Project="" Source="cad2pdf.suo" Description="文件已成功备份为 D:\Work\CONNOR\康华\04 系统实施\cad2pdf\Backup\cad2pdf.suo">
</Event><Event ErrorLevel="0" Project="cad2pdf" Source="cad2pdf\cad2pdf.vbproj" Description="项目文件已成功备份为 D:\Work\CONNOR\康华\04 系统实施\cad2pdf\Backup\cad2pdf\cad2pdf.vbproj">
</Event><Event ErrorLevel="0" Project="cad2pdf" Source="cad2pdf\cad2pdf.vbproj.user" Description="项目用户文件成功备份为 D:\Work\CONNOR\康华\04 系统实施\cad2pdf\Backup\cad2pdf\cad2pdf.vbproj.user">
</Event><Event ErrorLevel="0" Project="cad2pdf" Source="cad2pdf\Form1.vb" Description="文件已成功备份为 D:\Work\CONNOR\康华\04 系统实施\cad2pdf\Backup\cad2pdf\Form1.vb">
</Event><Event ErrorLevel="0" Project="cad2pdf" Source="cad2pdf\Form1.Designer.vb" Description="文件已成功备份为 D:\Work\CONNOR\康华\04 系统实施\cad2pdf\Backup\cad2pdf\Form1.Designer.vb">
</Event><Event ErrorLevel="0" Project="cad2pdf" Source="cad2pdf\Module1.vb" Description="文件已成功备份为 D:\Work\CONNOR\康华\04 系统实施\cad2pdf\Backup\cad2pdf\Module1.vb">
</Event><Event ErrorLevel="0" Project="cad2pdf" Source="cad2pdf\My Project\AssemblyInfo.vb" Description="文件已成功备份为 D:\Work\CONNOR\康华\04 系统实施\cad2pdf\Backup\cad2pdf\My Project\AssemblyInfo.vb">
</Event><Event ErrorLevel="0" Project="cad2pdf" Source="cad2pdf\My Project\Application.Designer.vb" Description="文件已成功备份为 D:\Work\CONNOR\康华\04 系统实施\cad2pdf\Backup\cad2pdf\My Project\Application.Designer.vb">
</Event><Event ErrorLevel="0" Project="cad2pdf" Source="cad2pdf\My Project\Resources.Designer.vb" Description="文件已成功备份为 D:\Work\CONNOR\康华\04 系统实施\cad2pdf\Backup\cad2pdf\My Project\Resources.Designer.vb">
</Event><Event ErrorLevel="0" Project="cad2pdf" Source="cad2pdf\My Project\Settings.Designer.vb" Description="文件已成功备份为 D:\Work\CONNOR\康华\04 系统实施\cad2pdf\Backup\cad2pdf\My Project\Settings.Designer.vb">
</Event><Event ErrorLevel="0" Project="cad2pdf" Source="cad2pdf\My Project\Application.myapp" Description="文件已成功备份为 D:\Work\CONNOR\康华\04 系统实施\cad2pdf\Backup\cad2pdf\My Project\Application.myapp">
</Event><Event ErrorLevel="0" Project="cad2pdf" Source="cad2pdf\My Project\Settings.settings" Description="文件已成功备份为 D:\Work\CONNOR\康华\04 系统实施\cad2pdf\Backup\cad2pdf\My Project\Settings.settings">
</Event><Event ErrorLevel="0" Project="cad2pdf" Source="cad2pdf\My Project\Resources.resx" Description="文件已成功备份为 D:\Work\CONNOR\康华\04 系统实施\cad2pdf\Backup\cad2pdf\My Project\Resources.resx">
</Event><Event ErrorLevel="0" Project="cad2pdf" Source="cad2pdf\cad2pdf.vbproj" Description="项目已成功转换">
</Event><Event ErrorLevel="3" Project="cad2pdf" Source="cad2pdf\cad2pdf.vbproj" Description="Converted">
</Event><Event ErrorLevel="0" Project="" Source="cad2pdf.sln" Description="成功转换解决方案">
</Event><Event ErrorLevel="3" Project="" Source="cad2pdf.sln" Description="Converted">
</Event><Event ErrorLevel="0" Project="cad2pdf" Source="cad2pdf\cad2pdf.vbproj" Description="扫描完成: 项目文件不需要升级。">
</Event></UpgradeLog>

@ -0,0 +1,207 @@
BODY
{
BACKGROUND-COLOR: white;
FONT-FAMILY: "Verdana", sans-serif;
FONT-SIZE: 100%;
MARGIN-LEFT: 0px;
MARGIN-TOP: 0px
}
P
{
FONT-FAMILY: "Verdana", sans-serif;
FONT-SIZE: 70%;
LINE-HEIGHT: 12pt;
MARGIN-BOTTOM: 0px;
MARGIN-LEFT: 10px;
MARGIN-TOP: 10px
}
.note
{
BACKGROUND-COLOR: #ffffff;
COLOR: #336699;
FONT-FAMILY: "Verdana", sans-serif;
FONT-SIZE: 100%;
MARGIN-BOTTOM: 0px;
MARGIN-LEFT: 0px;
MARGIN-TOP: 0px;
PADDING-RIGHT: 10px
}
.infotable
{
BACKGROUND-COLOR: #f0f0e0;
BORDER-BOTTOM: #ffffff 0px solid;
BORDER-COLLAPSE: collapse;
BORDER-LEFT: #ffffff 0px solid;
BORDER-RIGHT: #ffffff 0px solid;
BORDER-TOP: #ffffff 0px solid;
FONT-SIZE: 70%;
MARGIN-LEFT: 10px
}
.issuetable
{
BACKGROUND-COLOR: #ffffe8;
BORDER-COLLAPSE: collapse;
COLOR: #000000;
FONT-SIZE: 100%;
MARGIN-BOTTOM: 10px;
MARGIN-LEFT: 13px;
MARGIN-TOP: 0px
}
.issuetitle
{
BACKGROUND-COLOR: #ffffff;
BORDER-BOTTOM: #dcdcdc 1px solid;
BORDER-TOP: #dcdcdc 1px;
COLOR: #003366;
FONT-WEIGHT: normal
}
.header
{
BACKGROUND-COLOR: #cecf9c;
BORDER-BOTTOM: #ffffff 1px solid;
BORDER-LEFT: #ffffff 1px solid;
BORDER-RIGHT: #ffffff 1px solid;
BORDER-TOP: #ffffff 1px solid;
COLOR: #000000;
FONT-WEIGHT: bold
}
.issuehdr
{
BACKGROUND-COLOR: #E0EBF5;
BORDER-BOTTOM: #dcdcdc 1px solid;
BORDER-TOP: #dcdcdc 1px solid;
COLOR: #000000;
FONT-WEIGHT: normal
}
.issuenone
{
BACKGROUND-COLOR: #ffffff;
BORDER-BOTTOM: 0px;
BORDER-LEFT: 0px;
BORDER-RIGHT: 0px;
BORDER-TOP: 0px;
COLOR: #000000;
FONT-WEIGHT: normal
}
.content
{
BACKGROUND-COLOR: #e7e7ce;
BORDER-BOTTOM: #ffffff 1px solid;
BORDER-LEFT: #ffffff 1px solid;
BORDER-RIGHT: #ffffff 1px solid;
BORDER-TOP: #ffffff 1px solid;
PADDING-LEFT: 3px
}
.issuecontent
{
BACKGROUND-COLOR: #ffffff;
BORDER-BOTTOM: #dcdcdc 1px solid;
BORDER-TOP: #dcdcdc 1px solid;
PADDING-LEFT: 3px
}
A:link
{
COLOR: #cc6633;
TEXT-DECORATION: underline
}
A:visited
{
COLOR: #cc6633;
}
A:active
{
COLOR: #cc6633;
}
A:hover
{
COLOR: #cc3300;
TEXT-DECORATION: underline
}
H1
{
BACKGROUND-COLOR: #003366;
BORDER-BOTTOM: #336699 6px solid;
COLOR: #ffffff;
FONT-SIZE: 130%;
FONT-WEIGHT: normal;
MARGIN: 0em 0em 0em -20px;
PADDING-BOTTOM: 8px;
PADDING-LEFT: 30px;
PADDING-TOP: 16px
}
H2
{
COLOR: #000000;
FONT-SIZE: 80%;
FONT-WEIGHT: bold;
MARGIN-BOTTOM: 3px;
MARGIN-LEFT: 10px;
MARGIN-TOP: 20px;
PADDING-LEFT: 0px
}
H3
{
COLOR: #000000;
FONT-SIZE: 80%;
FONT-WEIGHT: bold;
MARGIN-BOTTOM: -5px;
MARGIN-LEFT: 10px;
MARGIN-TOP: 20px
}
H4
{
COLOR: #000000;
FONT-SIZE: 70%;
FONT-WEIGHT: bold;
MARGIN-BOTTOM: 0px;
MARGIN-TOP: 15px;
PADDING-BOTTOM: 0px
}
UL
{
COLOR: #000000;
FONT-SIZE: 70%;
LIST-STYLE: square;
MARGIN-BOTTOM: 0pt;
MARGIN-TOP: 0pt
}
OL
{
COLOR: #000000;
FONT-SIZE: 70%;
LIST-STYLE: square;
MARGIN-BOTTOM: 0pt;
MARGIN-TOP: 0pt
}
LI
{
LIST-STYLE: square;
MARGIN-LEFT: 0px
}
.expandable
{
CURSOR: hand
}
.expanded
{
color: black
}
.collapsed
{
DISPLAY: none
}
.foot
{
BACKGROUND-COLOR: #ffffff;
BORDER-BOTTOM: #cecf9c 1px solid;
BORDER-TOP: #cecf9c 2px solid
}
.settings
{
MARGIN-LEFT: 25PX;
}
.help
{
TEXT-ALIGN: right;
margin-right: 10px;
}

@ -0,0 +1,232 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:key name="ProjectKey" match="Event" use="@Project"/>
<xsl:template match="Events" mode="createProjects">
<projects>
<xsl:for-each select="Event">
<!--xsl:sort select="@Project" order="descending"/-->
<xsl:if test="(1=position()) or (preceding-sibling::*[1]/@Project != @Project)">
<xsl:variable name="ProjectName" select="@Project"/>
<project>
<xsl:attribute name="name">
<xsl:value-of select="@Project"/>
</xsl:attribute>
<xsl:if test="@Project=''">
<xsl:attribute name="solution">
<xsl:value-of select="@Solution"/>
</xsl:attribute>
</xsl:if>
<xsl:for-each select="key('ProjectKey', $ProjectName)">
<!--xsl:sort select="@Source" /-->
<xsl:if test="(1=position()) or (preceding-sibling::*[1]/@Source != @Source)">
<source>
<xsl:attribute name="name">
<xsl:value-of select="@Source"/>
</xsl:attribute>
<xsl:variable name="Source">
<xsl:value-of select="@Source"/>
</xsl:variable>
<xsl:for-each select="key('ProjectKey', $ProjectName)[ @Source = $Source ]">
<event>
<xsl:attribute name="error-level">
<xsl:value-of select="@ErrorLevel"/>
</xsl:attribute>
<xsl:attribute name="description">
<xsl:value-of select="@Description"/>
</xsl:attribute>
</event>
</xsl:for-each>
</source>
</xsl:if>
</xsl:for-each>
</project>
</xsl:if>
</xsl:for-each>
</projects>
</xsl:template>
<xsl:template match="projects">
<xsl:for-each select="project">
<xsl:sort select="@Name" order="ascending"/>
<h2>
<xsl:if test="@solution"><a _locID="Solution">解决方案</a>: <xsl:value-of select="@solution"/></xsl:if>
<xsl:if test="not(@solution)"><a _locID="Project">项目</a>: <xsl:value-of select="@name"/>
<xsl:for-each select="source">
<xsl:variable name="Hyperlink" select="@name"/>
<xsl:for-each select="event[@error-level='4']">
<A class="note"><xsl:attribute name="HREF"><xsl:value-of select="$Hyperlink"/></xsl:attribute><xsl:value-of select="@description"/></A>
</xsl:for-each>
</xsl:for-each>
</xsl:if>
</h2>
<table cellpadding="2" cellspacing="0" width="98%" border="1" bordercolor="white" class="infotable">
<tr>
<td nowrap="1" class="header" _locID="Filename">文件名</td>
<td nowrap="1" class="header" _locID="Status">状态</td>
<td nowrap="1" class="header" _locID="Errors">错误</td>
<td nowrap="1" class="header" _locID="Warnings">警告</td>
</tr>
<xsl:for-each select="source">
<xsl:sort select="@name" order="ascending"/>
<xsl:variable name="source-id" select="generate-id(.)"/>
<xsl:if test="count(event)!=count(event[@error-level='4'])">
<tr class="row">
<td class="content">
<A HREF="javascript:"><xsl:attribute name="onClick">javascript:document.images['<xsl:value-of select="$source-id"/>'].click()</xsl:attribute><IMG border="0" _locID="IMG.alt" _locAttrData="alt" alt="展开/折叠节" class="expandable" height="11" onclick="changepic()" src="_UpgradeReport_Files/UpgradeReport_Plus.gif" width="9"><xsl:attribute name="name"><xsl:value-of select="$source-id"/></xsl:attribute><xsl:attribute name="child">src<xsl:value-of select="$source-id"/></xsl:attribute></IMG></A> <xsl:value-of select="@name"/>
</td>
<td class="content">
<xsl:if test="count(event[@error-level='3'])=1">
<xsl:for-each select="event[@error-level='3']">
<xsl:if test="@description='Converted'"><a _locID="Converted1">已转换</a></xsl:if>
<xsl:if test="@description!='Converted'"><xsl:value-of select="@description"/></xsl:if>
</xsl:for-each>
</xsl:if>
<xsl:if test="count(event[@error-level='3'])!=1 and count(event[@error-level='3' and @description='Converted'])!=0"><a _locID="Converted2">已转换</a>
</xsl:if>
</td>
<td class="content"><xsl:value-of select="count(event[@error-level='2'])"/></td>
<td class="content"><xsl:value-of select="count(event[@error-level='1'])"/></td>
</tr>
<tr class="collapsed" bgcolor="#ffffff">
<xsl:attribute name="id">src<xsl:value-of select="$source-id"/></xsl:attribute>
<td colspan="7">
<table width="97%" border="1" bordercolor="#dcdcdc" rules="cols" class="issuetable">
<tr>
<td colspan="7" class="issuetitle" _locID="ConversionIssues">转换报告 - <xsl:value-of select="@name"/>:</td>
</tr>
<xsl:for-each select="event[@error-level!='3']">
<xsl:if test="@error-level!='4'">
<tr>
<td class="issuenone" style="border-bottom:solid 1 lightgray">
<xsl:value-of select="@description"/>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</td>
</tr>
</xsl:if>
</xsl:for-each>
<tr valign="top">
<td class="foot">
<xsl:if test="count(source)!=1">
<xsl:value-of select="count(source)"/><a _locID="file1"> 个文件</a>
</xsl:if>
<xsl:if test="count(source)=1">
<a _locID="file2">1 个文件</a>
</xsl:if>
</td>
<td class="foot">
<a _locID="Converted3">已转换</a>: <xsl:value-of select="count(source/event[@error-level='3' and @description='Converted'])"/><BR/>
<a _locID="NotConverted">未转换</a>: <xsl:value-of select="count(source) - count(source/event[@error-level='3' and @description='Converted'])"/>
</td>
<td class="foot"><xsl:value-of select="count(source/event[@error-level='2'])"/></td>
<td class="foot"><xsl:value-of select="count(source/event[@error-level='1'])"/></td>
</tr>
</table>
</xsl:for-each>
</xsl:template>
<xsl:template match="Property">
<xsl:if test="@Name!='Date' and @Name!='Time' and @Name!='LogNumber' and @Name!='Solution'">
<tr><td nowrap="1"><b><xsl:value-of select="@Name"/>: </b><xsl:value-of select="@Value"/></td></tr>
</xsl:if>
</xsl:template>
<xsl:template match="UpgradeLog">
<html>
<head>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" href="_UpgradeReport_Files\UpgradeReport.css"/>
<title _locID="ConversionReport0">转换报告
<xsl:if test="Properties/Property[@Name='LogNumber']">
<xsl:value-of select="Properties/Property[@Name='LogNumber']/@Value"/>
</xsl:if>
</title>
<script language="javascript">
function outliner () {
oMe = window.event.srcElement
//get child element
var child = document.all[event.srcElement.getAttribute("child",false)];
//if child element exists, expand or collapse it.
if (null != child)
child.className = child.className == "collapsed" ? "expanded" : "collapsed";
}
function changepic() {
uMe = window.event.srcElement;
var check = uMe.src.toLowerCase();
if (check.lastIndexOf("upgradereport_plus.gif") != -1)
{
uMe.src = "_UpgradeReport_Files/UpgradeReport_Minus.gif"
}
else
{
uMe.src = "_UpgradeReport_Files/UpgradeReport_Plus.gif"
}
}
</script>
</head>
<body topmargin="0" leftmargin="0" rightmargin="0" onclick="outliner();">
<h1 _locID="ConversionReport">转换报告 - <xsl:value-of select="Properties/Property[@Name='Solution']/@Value"/></h1>
<p><span class="note">
<b _locID="TimeOfConversion">转换时间:</b> <xsl:value-of select="Properties/Property[@Name='Date']/@Value"/> <xsl:value-of select="Properties/Property[@Name='Time']/@Value"/><br/>
</span></p>
<xsl:variable name="SortedEvents">
<Events>
<xsl:for-each select="Event">
<xsl:sort select="@Project" order="ascending"/>
<xsl:sort select="@Source" order="ascending"/>
<xsl:sort select="@ErrorLevel" order="ascending"/>
<Event>
<xsl:attribute name="Project"><xsl:value-of select="@Project"/> </xsl:attribute>
<xsl:attribute name="Solution"><xsl:value-of select="/UpgradeLog/Properties/Property[@Name='Solution']/@Value"/> </xsl:attribute>
<xsl:attribute name="Source"><xsl:value-of select="@Source"/> </xsl:attribute>
<xsl:attribute name="ErrorLevel"><xsl:value-of select="@ErrorLevel"/> </xsl:attribute>
<xsl:attribute name="Description"><xsl:value-of select="@Description"/> </xsl:attribute>
</Event>
</xsl:for-each>
</Events>
</xsl:variable>
<xsl:variable name="Projects">
<xsl:apply-templates select="msxsl:node-set($SortedEvents)/*" mode="createProjects"/>
</xsl:variable>
<xsl:apply-templates select="msxsl:node-set($Projects)/*"/>
<p></p><p>
<table class="note">
<tr>
<td nowrap="1">
<b _locID="ConversionSettings">转换设置</b>
</td>
</tr>
<xsl:apply-templates select="Properties"/>
</table></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 B

@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "cad2pdf", "cad2pdf\cad2pdf.vbproj", "{B257FD6B-B4D5-4AFC-9110-205237C3B069}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B257FD6B-B4D5-4AFC-9110-205237C3B069}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B257FD6B-B4D5-4AFC-9110-205237C3B069}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B257FD6B-B4D5-4AFC-9110-205237C3B069}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B257FD6B-B4D5-4AFC-9110-205237C3B069}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Binary file not shown.

Binary file not shown.

@ -0,0 +1,30 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
Inherits System.Windows.Forms.Form
'Form Dispose
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Windows
Private components As System.ComponentModel.IContainer
': Windows
'使 Windows
'使
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
components = New System.ComponentModel.Container()
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.Text = "Form1"
End Sub
End Class

@ -0,0 +1,3 @@
Public Class Form1
End Class

@ -0,0 +1,366 @@
'Imports AutoCAD
Imports ZWCAD
'Imports Autodesk.AutoCAD.Interop
'Imports Autodesk.AutoCAD.Interop.Common
'Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Module Module1
Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Public Function FileExist(ByVal strPath As String) As Boolean
FileExist = System.IO.File.Exists(strPath)
End Function
Sub Main()
Dim acadApp As ZWCAD.IZcadApplication
Dim acadDoc As ZcadDocument
Dim docModelSpace As ZWCAD.IZcadModelSpace
Dim plotConfs As ZcadPlotConfigurations
Dim plotconf As ZcadPlotConfiguration
Dim layoutObject As ZcadLayout
Dim oPlot As ZcadPlot
Dim copyObj As Object
Dim copyObjs() As ZcadEntity
Dim copyedObjs() As Object
Dim i As Integer
Dim isQuit As String
Dim strArgs
Dim dwgFile As String
Dim pdfFile As String
Dim yp_sign, sd_sign, dh_sign As String '
Dim ptMin(2) As Double
Dim ptMax(2) As Double
Dim eMax As Object
Dim eMin As Object
Dim a As String
Dim b As String
Dim LayoutList As Object
Dim ArraySize As Integer
Dim AddedLayouts() As String
Dim groupObj As ZcadGroup
Dim commandString As String
commandString = Command()
strArgs = Split(commandString, " ") ',3,
'MsgBox(commandString)
For i = LBound(strArgs) To UBound(strArgs)
'MsgBox(a_strArgs(I))
Select Case i
Case 0
dwgFile = strArgs(i)
End Select
Next
If FileExist(dwgFile) Then
Else
Exit Sub
End If
'MsgBox(dwgFile)
'MsgBox(pdfFile)
On Error Resume Next
acadApp = GetObject(, "ZWCAD.application")
'MsgBox("打开前")
If Err.Number <> 0 Then
Sleep(1500)
If Err.Number <> 0 Then
'MsgBox("未发现ZWCAD进程!")
Exit Sub
End If
End If
acadDoc = acadApp.Documents.Open(dwgFile)
'MsgBox("打开了")
'Sleep(1500)
Dim isA0 As Boolean
isA0 = False
Dim isA1 As Boolean
isA1 = False
Dim isA2 As Boolean
isA2 = False
Dim isA3 As Boolean
isA3 = False
Dim isA4 As Boolean
isA4 = False
Dim isheng As Boolean
isheng = True
Dim index As Long
Dim itemName As String
Dim blockRef As ZWCAD.IZcadBlockReference
Dim plotBlockRef As ZWCAD.IZcadBlockReference
Dim blockRefName As String
docModelSpace = acadDoc.ModelSpace
Dim myXScan As Double
Dim myYScan As Double
Dim objEnt As ZcadEntity
Dim objssline As ZcadSelectionSet
objssline = acadDoc.SelectionSets.Add("test")
'AutoCADShortInteger
Dim fType(0) As Integer
Dim fData(0)
fType(0) = 0
fData(0) = "INSERT"
objssline.Select(5, , , fType, fData)
For index = 0 To objssline.Count - 1
itemName = objssline.Item(index).ObjectName
'MsgBox("itemName===" & itemName)
pdfFile = Replace(dwgFile, ".dwg", "$" & index & ".pdf")
If itemName Like "AcDbBlockReference" Then
'MsgBox(name)
blockRef = objssline.Item(index)
blockRefName = blockRef.Name
' MsgBox(blockRefName)
If InStr(blockRefName, "ZwmFrameMain_A0^_^无分区图框^_^landscape") Then
blockRef.GetBoundingBox(ptMin, ptMax)
plotBlockRef = blockRef
myXScan = plotBlockRef.XScaleFactor
myYScan = plotBlockRef.YScaleFactor
' MsgBox("是A0")
isA0 = True
End If
If InStr(blockRefName, "ZwmFrameMain_A1^_^无分区图框^_^landscape") Then
blockRef.GetBoundingBox(ptMin, ptMax)
plotBlockRef = blockRef
myXScan = plotBlockRef.XScaleFactor
myYScan = plotBlockRef.YScaleFactor
' MsgBox("是A1")
isA1 = True
End If
If InStr(blockRefName, "ZwmFrameMain_A2^_^无分区图框^_^landscape") Then
blockRef.GetBoundingBox(ptMin, ptMax)
plotBlockRef = blockRef
myXScan = plotBlockRef.XScaleFactor
myYScan = plotBlockRef.YScaleFactor
' MsgBox("是A2")
isA2 = True
End If
If InStr(blockRefName, "ZwmFrameMain_A3^_^无分区图框^_^landscape") Then
blockRef.GetBoundingBox(ptMin, ptMax)
plotBlockRef = blockRef
myXScan = plotBlockRef.XScaleFactor
myYScan = plotBlockRef.YScaleFactor
'MsgBox("是A3")
isA3 = True
End If
If InStr(blockRefName, "ZwmFrameMain_A4^_^无分区图框^_^landscape") Then
blockRef.GetBoundingBox(ptMin, ptMax)
plotBlockRef = blockRef
myXScan = plotBlockRef.XScaleFactor
myYScan = plotBlockRef.YScaleFactor
' MsgBox("是A4")
isA4 = True
End If
If InStr(blockRefName, "ZwmFrameMain_A0^_^无分区图框^_^portrait") Then
blockRef.GetBoundingBox(ptMin, ptMax)
plotBlockRef = blockRef
myXScan = plotBlockRef.XScaleFactor
myYScan = plotBlockRef.YScaleFactor
' MsgBox("是A0")
isA0 = True
isheng = False
End If
If InStr(blockRefName, "ZwmFrameMain_A1^_^无分区图框^_^portrait") Then
blockRef.GetBoundingBox(ptMin, ptMax)
plotBlockRef = blockRef
myXScan = plotBlockRef.XScaleFactor
myYScan = plotBlockRef.YScaleFactor
' MsgBox("是A1")
isA1 = True
isheng = False
End If
If InStr(blockRefName, "ZwmFrameMain_A2^_^无分区图框^_^portrait") Then
blockRef.GetBoundingBox(ptMin, ptMax)
plotBlockRef = blockRef
myXScan = plotBlockRef.XScaleFactor
myYScan = plotBlockRef.YScaleFactor
' MsgBox("是A2")
isA2 = True
isheng = False
End If
If InStr(blockRefName, "ZwmFrameMain_A3^_^无分区图框^_^portrait") Then
blockRef.GetBoundingBox(ptMin, ptMax)
plotBlockRef = blockRef
myXScan = plotBlockRef.XScaleFactor
myYScan = plotBlockRef.YScaleFactor
'MsgBox("是A3")
isA3 = True
isheng = False
End If
If InStr(blockRefName, "ZwmFrameMain_A4^_^无分区图框^_^portrait") Then
blockRef.GetBoundingBox(ptMin, ptMax)
plotBlockRef = blockRef
myXScan = plotBlockRef.XScaleFactor
myYScan = plotBlockRef.YScaleFactor
' MsgBox("是A4")
isA4 = True
isheng = False
End If
If isA0 Or isA1 Or isA2 Or isA3 Or isA4 Then
layoutObject = acadDoc.ActiveLayout
layoutObject.ConfigName = "DWG to PDF.pc5" ' DWG to PDF.pc5
layoutObject.StyleSheet = "Monochrome.ctb" '
layoutObject.StandardScale = ZWCAD.ZcPlotScale.zcScaleToFit '
layoutObject.UseStandardScale = True
layoutObject.QuietErrorMode = True
layoutObject.PlotType = ZWCAD.ZcPlotType.zcWindow 'app
ReDim Preserve ptMin(0 To 1)
ReDim Preserve ptMax(0 To 1)
layoutObject.SetWindowToPlot(ptMin, ptMax) '
layoutObject.CenterPlot = True '
layoutObject.PlotWithPlotStyles = True '
layoutObject.PlotRotation = ZWCAD.ZcPlotRotation.zc0degrees
layoutObject.PlotRotation = ZWCAD.ZcPlotRotation.zc0degrees
If isheng Then
If isA0 Then
layoutObject.CanonicalMediaName = "ISO_full_bleed_A0_(1189.00_x_841.00_MM)"
isA0 = False
isheng = False
ElseIf isA1 Then
' MsgBox("A1")
layoutObject.CanonicalMediaName = "ISO_full_bleed_A1_(841.00_x_594.00_MM)"
isA1 = False
isheng = False
ElseIf isA2 Then
' MsgBox("A2")
layoutObject.CanonicalMediaName = "ISO_full_bleed A2_(594.00_x_420.00_MM)"
isA2 = False
isheng = False
ElseIf isA3 Then
' MsgBox("A3")
layoutObject.CanonicalMediaName = "ISO_full_bleed_A3_(420.00_x_297.00_MM)"
isA3 = False
isheng = False
ElseIf isA4 Then
' MsgBox("A4")
layoutObject.CanonicalMediaName = "ISO_full_bleed_A4_(297.00_x_210.00_MM)"
isA4 = False
isheng = False
End If
Else
If isA0 Then
layoutObject.CanonicalMediaName = "ISO_full_bleed_A0_(841.00_x_1189.00_MM)"
isA0 = False
ElseIf isA1 Then
' MsgBox("A1")
layoutObject.CanonicalMediaName = "ISO_full_bleed_A1_(594.00_x_841.00_MM)"
isA1 = False
ElseIf isA2 Then
' MsgBox("A2")
layoutObject.CanonicalMediaName = "ISO_full_bleed_A2_(420.00_x_594.00_MM)"
isA2 = False
ElseIf isA3 Then
' MsgBox("A3")
layoutObject.CanonicalMediaName = "ISO_full_bleed_A3_(297.00_x_420.00_MM)"
isA3 = False
ElseIf isA4 Then
' MsgBox("A4")
layoutObject.CanonicalMediaName = "ISO_full_bleed_A4_(210.00_x_297.00_MM)"
isA4 = False
End If
End If
acadDoc.Layouts.Delete()
'acadDoc.Layouts.Add("Plot")
acadDoc.ActiveLayout = layoutObject
acadDoc.Plot.SetLayoutsToPlot(acadDoc.Layouts)
acadDoc.SetVariable("BACKGROUNDPLOT", 0)
Dim isOk As Boolean
acadDoc.Plot.QuietErrorMode = True
isOk = acadDoc.Plot.PlotToFile(pdfFile, layoutObject.ConfigName)
End If
End If
Next
' MsgBox(isOk)
acadDoc.Close(False)
Sleep(1500)
'acadApp.Quit()
acadDoc = Nothing
acadApp = Nothing
End Sub
End Module

@ -0,0 +1,13 @@
'------------------------------------------------------------------------------
' <auto-generated>
'
' :4.0.30319.42000
'
'
'
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>Form1</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<ApplicationType>0</ApplicationType>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
'
'
'
'
<Assembly: AssemblyTitle("cad2pdf")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("Microsoft")>
<Assembly: AssemblyProduct("cad2pdf")>
<Assembly: AssemblyCopyright("Copyright © Microsoft 2014")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
' COM GUID ID
<Assembly: Guid("565829cf-c47e-4cf2-afdf-30aeccfe2666")>
' :
'
'
'
'
'
'
' 使
' 使*:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save