帳票システム構築支援 uCosminexus EUR uCosminexus EUR サーバ帳票出力
C言語のプログラムでエラーメッセージIDを取得する例を出力別に示します。
このプログラム例は,eurpsコマンドの標準エラー(メッセージ文)を,パイプを使って取得します。取得したメッセージ文を解析してメッセージIDを取得します。
#include<windows.h>
#include<stdio.h>
void main(int argc,char *argv[])
{
HANDLE hRead,hWrite;
SECURITY_ATTRIBUTES saAttr;
DWORD dwRead;
char sbuf[4096];
STARTUPINFO si;
PROCESS_INFORMATION pi;
BOOL bRtn;
CHAR szCmdLine[2048];
DWORD dwRC;
CHAR szExePath[_MAX_PATH];
/* eurps.exeのフルパス */
strcpy(szExePath, "c:\\program files\\hitachi\\eur print service\\program\\eurps.exe");
saAttr.nLength=sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle=TRUE;
saAttr.lpSecurityDescriptor=NULL;
bRtn=CreatePipe(&hRead,&hWrite,&saAttr,0);
if (bRtn !=TRUE){ /* CreatePipeに失敗 */
printf("CreatePipe failed\n");
exit(1);
}
// sprintf(szCmdLine,"%s /message /p printer1 sample1.fms,data1.csv", szExePath);
sprintf(szCmdLine,"%s /message sample1.fms,data1.csv", szExePath);
memset(&si, 0x00,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
si.dwFlags=STARTF_USESTDHANDLES;
si.hStdInput=GetStdHandle(STD_INPUT_HANDLE);
si.hStdOutput=GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError=hWrite;
memset(&pi,0x00,sizeof(pi));
_putenv("EURPS_REPORTPATH=.");
_putenv("EURPS_MAPDATAPATH=.");
bRtn=CreateProcessA(
NULL, //ファイル名
(LPTSTR)szCmdLine, //ファイル名+コマンド構文
NULL, //プロセス・セキュリティ
NULL, //スレッド・セキュリティ
TRUE, //ハンドルを継承するか?
DETACHED_PROCESS, //生成フラグ
NULL, //継承される環境ブロック
NULL, //起動時のフォルダ
&si, //スタートアップ情報へのポインタ
&pi); //プロセス情報へのポインタ
if (!bRtn) {
printf("CreateProcess failed\n");
exit(1);
}
/* writeパイプをクローズ */
CloseHandle(hWrite);
memset(sbuf,0x00,sizeof(sbuf));
/* メッセージ文の読み込み */
if (!ReadFile(hRead,sbuf,4095,&dwRead,NULL)) {
DWORD dwcode=GetLastError();
/* BROKEN_PIPEはエラーではない */
if (dwcode !=ERROR_BROKEN_PIPE) {
/* BROKEN_PIPE以外のとき */
printf("Read failed\n");
exit(1);
}
}
WaitForSingleObject(pi.hProcess,INFINITE);
GetExitCodeProcess(pi.hProcess,&dwRC);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hRead);
printf("eurps process terminated, rc = %d, returns [%s]\n", dwRC, sbuf);
if (dwRC>0) {
/* メッセージ文字列からメッセージIDをerridに取り出す */
char errid_str[10];
int errid;
memset(errid_str,0x00,sizeof(errid_str));
strncpy(errid_str,sbuf + strlen("eurps:KEEU"),3);
errid=atol(errid_str);
if (errid==300) {
/* KEEU300-Wの場合のエラー処理 */
} else if (errid==5) {
/* KEEU005-Eの場合のエラー処理 */
} else if (errid==6) {
/* KEEU006-Eの場合のエラー処理 */
} else if (errid== …{
:
/* 以下,そのほかのエラー処理を繰り返す */
}
exit(1);
}
}
#include<windows.h>
#include<stdio.h>
void main(int argc,char *argv[])
{
HANDLE hRead,hWrite;
SECURITY_ATTRIBUTES saAttr;
DWORD dwRead;
char sbuf[4096];
STARTUPINFO si;
PROCESS_INFORMATION pi;
BOOL bRtn;
CHAR szCmdLine[2048];
DWORD dwRC;
CHAR szExePath[_MAX_PATH];
/* eurps.exeのフルパス */
strcpy(szExePath, "c:\\program files\\hitachi\\eur print service\\program\\eurps.exe");
saAttr.nLength=sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle=TRUE;
saAttr.lpSecurityDescriptor=NULL;
bRtn=CreatePipe(&hRead,&hWrite,&saAttr,0);
if (bRtn !=TRUE){ /* CreatePipeに失敗 */
printf("CreatePipe failed\n");
exit(1);
}
sprintf(szCmdLine,"%s /message /t pdf /pf output.pdf sample1.fms,data1.csv", szExePath);
memset(&si, 0x00,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
si.dwFlags=STARTF_USESTDHANDLES;
si.hStdInput=GetStdHandle(STD_INPUT_HANDLE);
si.hStdOutput=GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError=hWrite;
memset(&pi,0x00,sizeof(pi));
_putenv("EURPS_REPORTPATH=.");
_putenv("EURPS_MAPDATAPATH=.");
_putenv("EURPS_OUTPUTPATH=.");
bRtn=CreateProcessA(
NULL, //ファイル名
(LPTSTR)szCmdLine, //ファイル名+コマンド構文
NULL, //プロセス・セキュリティ
NULL, //スレッド・セキュリティ
TRUE, //ハンドルを継承するか?
DETACHED_PROCESS, //生成フラグ
NULL, //継承される環境ブロック
NULL, //起動時のフォルダ
&si, //スタートアップ情報へのポインタ
&pi); //プロセス情報へのポインタ
if (!bRtn) {
printf("CreateProcess failed\n");
exit(1);
}
/* writeパイプをクローズ */
CloseHandle(hWrite);
memset(sbuf,0x00,sizeof(sbuf));
/* メッセージ文の読み込み */
if (!ReadFile(hRead,sbuf,4095,&dwRead,NULL)) {
DWORD dwcode=GetLastError();
/* BROKEN_PIPEはエラーではない */
if (dwcode !=ERROR_BROKEN_PIPE) {
/* BROKEN_PIPE以外のとき */
printf("Read failed\n");
exit(1);
}
}
WaitForSingleObject(pi.hProcess,INFINITE);
GetExitCodeProcess(pi.hProcess,&dwRC);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hRead);
printf("eurps process terminated, rc = %d, returns [%s]\n", dwRC, sbuf);
if (dwRC>0) {
/* メッセージ文字列からメッセージIDをerridに取り出す */
char errid_str[10];
int errid;
memset(errid_str,0x00,sizeof(errid_str));
strncpy(errid_str,sbuf + strlen("eurps:KEEU"),3);
errid=atol(errid_str);
if (errid==300) {
/* KEEU300-Wの場合のエラー処理 */
} else if (errid==5) {
/* KEEU005-Eの場合のエラー処理 */
} else if (errid==6) {
/* KEEU006-Eの場合のエラー処理 */
} else if (errid== …{
:
/* 以下,そのほかのエラー処理を繰り返す */
}
exit(1);
}
}
#include<windows.h>
#include<stdio.h>
void main(int argc,char *argv[])
{
HANDLE hRead,hWrite;
SECURITY_ATTRIBUTES saAttr;
DWORD dwRead;
char sbuf[4096];
STARTUPINFO si;
PROCESS_INFORMATION pi;
BOOL bRtn;
CHAR szCmdLine[2048];
DWORD dwRC;
CHAR szExePath[_MAX_PATH];
/* eurps.exeのフルパス */
strcpy(szExePath, "c:\\program files\\hitachi\\eur print service\\program\\eurps.exe");
saAttr.nLength=sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle=TRUE;
saAttr.lpSecurityDescriptor=NULL;
bRtn=CreatePipe(&hRead,&hWrite,&saAttr,0);
if (bRtn !=TRUE){ /* CreatePipeに失敗 */
printf("CreatePipe failed\n");
exit(1);
}
sprintf(szCmdLine,"%s /message /t eur /pf output.eup sample1.fms,data1.csv", szExePath);
memset(&si, 0x00,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
si.dwFlags=STARTF_USESTDHANDLES;
si.hStdInput=GetStdHandle(STD_INPUT_HANDLE);
si.hStdOutput=GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError=hWrite;
memset(&pi,0x00,sizeof(pi));
_putenv("EURPS_REPORTPATH=.");
_putenv("EURPS_MAPDATAPATH=.");
_putenv("EURPS_OUTPUTPATH=.");
bRtn=CreateProcessA(
NULL, //ファイル名
(LPTSTR)szCmdLine, //ファイル名+コマンド構文
NULL, //プロセス・セキュリティ
NULL, //スレッド・セキュリティ
TRUE, //ハンドルを継承するか?
DETACHED_PROCESS, //生成フラグ
NULL, //継承される環境ブロック
NULL, //起動時のフォルダ
&si, //スタートアップ情報へのポインタ
&pi); //プロセス情報へのポインタ
if (!bRtn) {
printf("CreateProcess failed\n");
exit(1);
}
/* writeパイプをクローズ */
CloseHandle(hWrite);
memset(sbuf,0x00,sizeof(sbuf));
/* メッセージ文の読み込み */
if (!ReadFile(hRead,sbuf,4095,&dwRead,NULL)) {
DWORD dwcode=GetLastError();
/* BROKEN_PIPEはエラーではない */
if (dwcode !=ERROR_BROKEN_PIPE) {
/* BROKEN_PIPE以外のとき */
printf("Read failed\n");
exit(1);
}
}
WaitForSingleObject(pi.hProcess,INFINITE);
GetExitCodeProcess(pi.hProcess,&dwRC);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hRead);
printf("eurps process terminated, rc = %d, returns [%s]\n", dwRC, sbuf);
if (dwRC>0) {
/* メッセージ文字列からメッセージIDをerridに取り出す */
char errid_str[10];
int errid;
memset(errid_str,0x00,sizeof(errid_str));
strncpy(errid_str,sbuf + strlen("eurps:KEEU"),3);
errid=atol(errid_str);
if (errid==300) {
/* KEEU300-Wの場合のエラー処理 */
} else if (errid==5) {
/* KEEU005-Eの場合のエラー処理 */
} else if (errid==6) {
/* KEEU006-Eの場合のエラー処理 */
} else if (errid== …{
:
/* 以下,そのほかのエラー処理を繰り返す */
}
exit(1);
}
}
#include<windows.h>
#include<stdio.h>
void main(int argc,char *argv[])
{
HANDLE hRead,hWrite;
SECURITY_ATTRIBUTES saAttr;
DWORD dwRead;
char sbuf[4096];
STARTUPINFO si;
PROCESS_INFORMATION pi;
BOOL bRtn;
CHAR szCmdLine[2048];
DWORD dwRC;
CHAR szExePath[_MAX_PATH];
/* eurps.exeのフルパス */
strcpy(szExePath, "c:\\program files\\hitachi\\eur print service\\program\\eurps.exe");
saAttr.nLength=sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle=TRUE;
saAttr.lpSecurityDescriptor=NULL;
bRtn=CreatePipe(&hRead,&hWrite,&saAttr,0);
if (bRtn !=TRUE){ /* CreatePipeに失敗 */
printf("CreatePipe failed\n");
exit(1);
}
sprintf(szCmdLine,"%s /message /t csv /pf output.csv sample1.fms,data1.csv", szExePath);
memset(&si, 0x00,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
si.dwFlags=STARTF_USESTDHANDLES;
si.hStdInput=GetStdHandle(STD_INPUT_HANDLE);
si.hStdOutput=GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError=hWrite;
memset(&pi,0x00,sizeof(pi));
_putenv("EURPS_REPORTPATH=.");
_putenv("EURPS_MAPDATAPATH=.");
_putenv("EURPS_OUTPUTPATH=.");
bRtn=CreateProcessA(
NULL, //ファイル名
(LPTSTR)szCmdLine, //ファイル名+コマンド構文
NULL, //プロセス・セキュリティ
NULL, //スレッド・セキュリティ
TRUE, //ハンドルを継承するか?
DETACHED_PROCESS, //生成フラグ
NULL, //継承される環境ブロック
NULL, //起動時のフォルダ
&si, //スタートアップ情報へのポインタ
&pi); //プロセス情報へのポインタ
if (!bRtn) {
printf("CreateProcess failed\n");
exit(1);
}
/* writeパイプをクローズ */
CloseHandle(hWrite);
memset(sbuf,0x00,sizeof(sbuf));
/* メッセージ文の読み込み */
if (!ReadFile(hRead,sbuf,4095,&dwRead,NULL)) {
DWORD dwcode=GetLastError();
/* BROKEN_PIPEはエラーではない */
if (dwcode !=ERROR_BROKEN_PIPE) {
/* BROKEN_PIPE以外のとき */
printf("Read failed\n");
exit(1);
}
}
WaitForSingleObject(pi.hProcess,INFINITE);
GetExitCodeProcess(pi.hProcess,&dwRC);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hRead);
printf("eurps process terminated, rc = %d, returns [%s]\n", dwRC, sbuf);
if (dwRC>0) {
/* メッセージ文字列からメッセージIDをerridに取り出す */
char errid_str[10];
int errid;
memset(errid_str,0x00,sizeof(errid_str));
strncpy(errid_str,sbuf + strlen("eurps:KEEU"),3);
errid=atol(errid_str);
if (errid==300) {
/* KEEU300-Wの場合のエラー処理 */
} else if (errid==5) {
/* KEEU005-Eの場合のエラー処理 */
} else if (errid==6) {
/* KEEU006-Eの場合のエラー処理 */
} else if (errid== …{
:
/* 以下,そのほかのエラー処理を繰り返す */
}
exit(1);
}
}
#include<windows.h>
#include<stdio.h>
void main(int argc,char *argv[])
{
HANDLE hRead,hWrite;
SECURITY_ATTRIBUTES saAttr;
DWORD dwRead;
char sbuf[4096];
STARTUPINFO si;
PROCESS_INFORMATION pi;
BOOL bRtn;
CHAR szCmdLine[2048];
DWORD dwRC;
CHAR szExePath[_MAX_PATH];
/* eurps.exeのフルパス */
strcpy(szExePath, "c:\\program files\\hitachi\\eur print service\\program\\eurps.exe");
saAttr.nLength=sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle=TRUE;
saAttr.lpSecurityDescriptor=NULL;
bRtn=CreatePipe(&hRead,&hWrite,&saAttr,0);
if (bRtn !=TRUE){ /* CreatePipeに失敗 */
printf("CreatePipe failed\n");
exit(1);
}
sprintf(szCmdLine,"%s /message /t xlsx /pf output.xlsx sample1.fms,data1.csv", szExePath);
memset(&si, 0x00,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
si.dwFlags=STARTF_USESTDHANDLES;
si.hStdInput=GetStdHandle(STD_INPUT_HANDLE);
si.hStdOutput=GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError=hWrite;
memset(&pi,0x00,sizeof(pi));
_putenv("EURPS_REPORTPATH=.");
_putenv("EURPS_MAPDATAPATH=.");
_putenv("EURPS_OUTPUTPATH=.");
bRtn=CreateProcessA(
NULL, //ファイル名
(LPTSTR)szCmdLine, //ファイル名+コマンド構文
NULL, //プロセス・セキュリティ
NULL, //スレッド・セキュリティ
TRUE, //ハンドルを継承するか?
DETACHED_PROCESS, //生成フラグ
NULL, //継承される環境ブロック
NULL, //起動時のフォルダ
&si, //スタートアップ情報へのポインタ
&pi); //プロセス情報へのポインタ
if (!bRtn) {
printf("CreateProcess failed\n");
exit(1);
}
/* writeパイプをクローズ */
CloseHandle(hWrite);
memset(sbuf,0x00,sizeof(sbuf));
/* メッセージ文の読み込み */
if (!ReadFile(hRead,sbuf,4095,&dwRead,NULL)) {
DWORD dwcode=GetLastError();
/* BROKEN_PIPEはエラーではない */
if (dwcode !=ERROR_BROKEN_PIPE) {
/* BROKEN_PIPE以外のとき */
printf("Read failed\n");
exit(1);
}
}
WaitForSingleObject(pi.hProcess,INFINITE);
GetExitCodeProcess(pi.hProcess,&dwRC);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hRead);
printf("eurps process terminated, rc = %d, returns [%s]\n", dwRC, sbuf);
if (dwRC>0) {
/* メッセージ文字列からメッセージIDをerridに取り出す */
char errid_str[10];
int errid;
memset(errid_str,0x00,sizeof(errid_str));
strncpy(errid_str,sbuf + strlen("eurps:KEEU"),3);
errid=atol(errid_str);
if (errid==300) {
/* KEEU300-Wの場合のエラー処理 */
} else if (errid==5) {
/* KEEU005-Eの場合のエラー処理 */
} else if (errid==6) {
/* KEEU006-Eの場合のエラー処理 */
} else if (errid== …{
:
/* 以下,そのほかのエラー処理を繰り返す */
}
exit(1);
}
}
All Rights Reserved. Copyright (C) 2008, 2011, Hitachi, Ltd.