Revision: 8860 https://osdn.net/projects/ttssh2/scm/svn/commits/8860 Author: zmatsuo Date: 2020-07-26 01:00:24 +0900 (Sun, 26 Jul 2020) Log Message: ----------- マクロ(ttmacro)用送信バッファの分離 - 受信した文字をマクロで判定等を行うために、マクロ(ttmacro)へ受信データを送信する - 従来は、1つのバッファをマクロとlogで共用していた - 各々で異なる文字コードを扱えるよう分離した - マクロ用は ttdde.c,h にまとめた Modified Paths: -------------- trunk/teraterm/common/tttypes.h trunk/teraterm/teraterm/commlib.c trunk/teraterm/teraterm/filesys.cpp trunk/teraterm/teraterm/filesys.h trunk/teraterm/teraterm/teraterm.cpp trunk/teraterm/teraterm/ttdde.c trunk/teraterm/teraterm/ttdde.h trunk/teraterm/teraterm/vtterm.c trunk/teraterm/teraterm/vtwin.cpp trunk/teraterm/ttpcmn/ttcmn.c trunk/teraterm/ttpmacro/ttmdde.c -------------- next part -------------- Modified: trunk/teraterm/common/tttypes.h =================================================================== --- trunk/teraterm/common/tttypes.h 2020-07-25 16:00:13 UTC (rev 8859) +++ trunk/teraterm/common/tttypes.h 2020-07-25 16:00:24 UTC (rev 8860) @@ -1075,10 +1075,11 @@ HANDLE HLogBuf; PCHAR LogBuf; int LogPtr, LStart, LCount; - /* Binary log & DDE */ + /* Binary log */ HANDLE HBinBuf; PCHAR BinBuf; - int BinPtr, BStart, BCount, DStart, DCount; + int BinPtr, BStart, BCount; + int reserve_0[2]; // DStart, DCount; int BinSkip; WORD FilePause; BOOL ProtoFlag; Modified: trunk/teraterm/teraterm/commlib.c =================================================================== --- trunk/teraterm/teraterm/commlib.c 2020-07-25 16:00:13 UTC (rev 8859) +++ trunk/teraterm/teraterm/commlib.c 2020-07-25 16:00:24 UTC (rev 8860) @@ -39,6 +39,7 @@ #include "ttlib.h" #include "ttfileio.h" #include "ttplug.h" /* TTPLUG */ +#include "ttdde.h" #include "commlib.h" #include <winsock2.h> @@ -142,8 +143,8 @@ cv->BinPtr = 0; cv->BStart = 0; cv->BCount = 0; - cv->DStart = 0; - cv->DCount = 0; +// cv->DStart = 0; +// cv->DCount = 0; cv->BinSkip = 0; cv->FilePause = 0; cv->ProtoFlag = FALSE; @@ -836,9 +837,7 @@ if (cv->InBuffCount>0) { return FALSE; } - if ((cv->HLogBuf!=NULL) && - ((cv->LCount>0) || - (cv->DCount>0))) { + if ((cv->HLogBuf!=NULL) && (cv->LCount>0)) { return FALSE; } if ((cv->HBinBuf!=NULL) && @@ -845,6 +844,9 @@ (cv->BCount>0)) { return FALSE; } + if (DDELog && DDEGetCount() > 0) { + return FALSE; + } return TRUE; } @@ -1235,8 +1237,8 @@ } if ((cv->PortType==IdTCPIP) || (cv->PortType==IdSerial) && - (!(ts->Flow == IdFlowHard || ts->Flow == IdFlowHardDsrDtr)) - ) { + (!(ts->Flow == IdFlowHard || ts->Flow == IdFlowHardDsrDtr)) + ) { if (Lock) { b = XOFF; } Modified: trunk/teraterm/teraterm/filesys.cpp =================================================================== --- trunk/teraterm/teraterm/filesys.cpp 2020-07-25 16:00:13 UTC (rev 8859) +++ trunk/teraterm/teraterm/filesys.cpp 2020-07-25 16:00:24 UTC (rev 8860) @@ -69,7 +69,6 @@ BOOL FileLog = FALSE; BOOL BinLog = FALSE; -BOOL DDELog = FALSE; static BOOL FileRetrySend, FileRetryEcho, FileCRSend, FileReadEOF, BinaryMode; static BYTE FileByte; @@ -964,26 +963,6 @@ } else cv.LCount = 0; - - if (DDELog) - { - if (cv.DCount>=InBuffSize) - { - cv.DCount = InBuffSize; - cv.DStart = cv.LogPtr; - } - else - cv.DCount++; - } - else { - cv.DCount = 0; - // \x83\x8D\x83O\x8D̎撆\x82Ƀ}\x83N\x83\x8D\x82\xAA\x83X\x83g\x81[\x83\x8B\x82\xB7\x82\xE9\x96\xE2\x91\xE8\x82ւ̏C\x90\xB3\x81B - // \x83\x8D\x83O\x8D̎撆\x82Ɉ\xEA\x93x\x83}\x83N\x83\x8D\x82\xF0\x8E~\x82߂\xE9\x82ƁA\x83o\x83b\x83t\x83@\x82̃C\x83\x93\x83f\x83b\x83N\x83X\x82\xAA\x93\xAF\x8A\xFA\x8E\xE6\x82\xEA\x82Ȃ\xAD\x82Ȃ\xE8\x81A - // \x8Dēx\x83}\x83N\x83\x8D\x82𗬂\xB5\x82Ă\xE0\x90\xB3\x82\xB5\x82\xA2\x83f\x81[\x83^\x82\xAA\x91\x97\x82\xEA\x82Ȃ\xA2\x82̂\xAA\x8C\xB4\x88\xF6\x81B - // \x83}\x83N\x83\x8D\x82\xF0\x92\xE2\x8E~\x82\xB3\x82\xB9\x82\xBD\x8F\xF3\x91Ԃł\xE0\x83C\x83\x93\x83f\x83b\x83N\x83X\x82̓\xAF\x8A\xFA\x82\xF0\x8E\xE6\x82\xE9\x82悤\x82ɂ\xB5\x82\xBD\x81B - // (2006.12.26 yutaka) - cv.DStart = cv.LogPtr; - } } static BOOL Get1(PCHAR Buf, int *Start, int *Count, PBYTE b) @@ -1288,8 +1267,6 @@ cv.LogPtr = 0; cv.LStart = 0; cv.LCount = 0; - cv.DStart = 0; - cv.DCount = 0; } return (cv.HLogBuf!=NULL); } @@ -1296,7 +1273,7 @@ void FreeLogBuf(void) { - if ((cv.HLogBuf==NULL) || FileLog || DDELog) + if ((cv.HLogBuf==NULL) || FileLog) return; if (cv.LogBuf!=NULL) GlobalUnlock(cv.HLogBuf); @@ -1306,8 +1283,6 @@ cv.LogPtr = 0; cv.LStart = 0; cv.LCount = 0; - cv.DStart = 0; - cv.DCount = 0; } BOOL CreateBinBuf(void) Modified: trunk/teraterm/teraterm/filesys.h =================================================================== --- trunk/teraterm/teraterm/filesys.h 2020-07-25 16:00:13 UTC (rev 8859) +++ trunk/teraterm/teraterm/filesys.h 2020-07-25 16:00:24 UTC (rev 8860) @@ -100,9 +100,8 @@ void QVStart(int mode); extern PFileVar SendVar, FileVar; -extern BOOL FileLog, BinLog, DDELog; +extern BOOL FileLog, BinLog; - // log void logfile_lock_initialize(void); void FLogRotateSize(size_t size); Modified: trunk/teraterm/teraterm/teraterm.cpp =================================================================== --- trunk/teraterm/teraterm/teraterm.cpp 2020-07-25 16:00:13 UTC (rev 8859) +++ trunk/teraterm/teraterm/teraterm.cpp 2020-07-25 16:00:24 UTC (rev 8860) @@ -195,9 +195,6 @@ if (FileLog) { LogToFile(); } - if (DDELog && AdvFlag) { - DDEAdv(); - } GlobalUnlock(cv.HLogBuf); cv.LogBuf = NULL; } @@ -210,6 +207,9 @@ GlobalUnlock(cv.HBinBuf); cv.BinBuf = NULL; } + if (DDELog && AdvFlag) { + DDEAdv(); + } /* Talker */ switch (TalkStatus) { @@ -227,7 +227,7 @@ } /* Receiver */ - if (DDELog && cv.DCount >0) { + if (DDELog && DDEGetCount() > 0) { // \x83\x8D\x83O\x83o\x83b\x83t\x83@\x82\xAA\x82܂\xBEDDE\x83N\x83\x89\x83C\x83A\x83\x93\x83g\x82֑\x97\x82\xE7\x82\xEA\x82Ă\xA2\x82Ȃ\xA2\x8Fꍇ\x82́A // TCP\x83p\x83P\x83b\x83g\x82̎\xF3\x90M\x82\xF0\x8Ds\x82\xED\x82Ȃ\xA2\x81B // \x98A\x91\xB1\x82\xB5\x82Ď\xF3\x90M\x82\xF0\x8Ds\x82\xA4\x82ƁA\x83\x8D\x83O\x83o\x83b\x83t\x83@\x82\xAA\x83\x89\x83E\x83\x93\x83h\x83\x8D\x83r\x83\x93\x82ɂ\xE6\x82薢\x91\x97\x90M\x82̃f\x81[\x83^\x82\xF0 @@ -240,7 +240,7 @@ } if (cv.Ready && - (cv.RRQ || (cv.OutBuffCount>0) || (cv.InBuffCount>0) || (cv.FlushLen>0) || (cv.LCount>0) || (cv.BCount>0) || (cv.DCount>0)) ) { + (cv.RRQ || (cv.OutBuffCount>0) || (cv.InBuffCount>0) || (cv.FlushLen>0) || (cv.LCount>0) || (cv.BCount>0) || (DDEGetCount()>0)) ) { Busy = 2; } else { Modified: trunk/teraterm/teraterm/ttdde.c =================================================================== --- trunk/teraterm/teraterm/ttdde.c 2020-07-25 16:00:13 UTC (rev 8859) +++ trunk/teraterm/teraterm/ttdde.c 2020-07-25 16:00:24 UTC (rev 8860) @@ -53,8 +53,9 @@ #define MaxStrLen (LONG)512 +BOOL DDELog = FALSE; // macro (DDE) \x82\xAA\x97L\x8C\xF8\x82\xA9\x82ǂ\xA4\x82\xA9\x82\xF0\x8E\xA6\x82\xB7 char TopicName[21] = ""; -HCONV ConvH = 0; +static HCONV ConvH = 0; BOOL AdvFlag = FALSE; BOOL CloseTT = FALSE; @@ -81,6 +82,51 @@ static BOOL AutoLogClose = FALSE; +static char *cv_LogBuf; +static int cv_LogPtr; +static int cv_DStart; +static int cv_DCount; + +/** + * \x83}\x83N\x83\x8D\x82ւ̑\x97\x90M\x83o\x83b\x83t\x83@\x82\xD61byte\x82݂\xB1\x82\xDE + * \x83o\x83b\x83t\x83@\x83t\x83\x8B\x82̎\x9E\x82͌Â\xA2\x82\xE0\x82̂\xA9\x82\xE7\x8ÊĂ\xE7\x82\xEA\x82\xE9 + */ +void DDEPut1(BYTE b) +{ + if (!DDELog) { + return; + } + + cv_LogBuf[cv_LogPtr] = b; + cv_LogPtr++; + if (cv_LogPtr >= InBuffSize) + cv_LogPtr = cv_LogPtr - InBuffSize; + + if (cv_DCount >= InBuffSize) + { + cv_DCount = InBuffSize; + cv_DStart = cv_LogPtr; + } +} + +static BOOL DDECreateBuf(void) +{ + cv_LogBuf = (char *)malloc(InBuffSize); + if (cv_LogBuf == NULL) { + return FALSE; + } + cv_LogPtr = 0; + cv_DStart = 0; + cv_DCount = 0; + return TRUE; +} + +static void DDEFreeBuf(void) +{ + free(cv_LogBuf); + cv_LogBuf = NULL; +} + static void BringupMacroWindow(BOOL flash_flag) { HWND hwnd; @@ -186,29 +232,29 @@ return 0; } -BOOL DDEGet1(LPBYTE b) +static BOOL DDEGet1(LPBYTE b) { - if (cv.DCount <= 0) return FALSE; - *b = ((LPSTR)cv.LogBuf)[cv.DStart]; - cv.DStart++; - if (cv.DStart>=InBuffSize) - cv.DStart = cv.DStart-InBuffSize; - cv.DCount--; + if (cv_DCount <= 0) return FALSE; + *b = ((LPSTR)cv_LogBuf)[cv_DStart]; + cv_DStart++; + if (cv_DStart>=InBuffSize) + cv_DStart = cv_DStart-InBuffSize; + cv_DCount--; return TRUE; } -LONG DDEGetDataLen() +static LONG DDEGetDataLen() { BYTE b; LONG Len; int Start, Count; - Len = cv.DCount; - Start = cv.DStart; - Count = cv.DCount; + Len = cv_DCount; + Start = cv_DStart; + Count = cv_DCount; while (Count>0) { - b = ((LPSTR)cv.LogBuf)[Start]; + b = ((LPSTR)cv_LogBuf)[Start]; if ((b==0x00) || (b==0x01)) Len++; Start++; if (Start>=InBuffSize) Start = Start-InBuffSize; @@ -218,8 +264,16 @@ return Len; } -HDDEDATA AcceptRequest(HSZ ItemHSz) +/** + * \x91\x97\x90M\x83o\x83b\x83t\x83@\x82Ɏc\x82\xC1\x82Ă\xA2\x82\xE9\x83f\x81[\x83^\x90\x94\x8E擾 + */ +int DDEGetCount(void) { + return cv_DCount; +} + +static HDDEDATA AcceptRequest(HSZ ItemHSz) +{ BYTE b; BOOL Unlock; HDDEDATA DH; @@ -234,16 +288,6 @@ Item2,CF_OEMTEXT,0); else if (DdeCmpStringHandles(ItemHSz, Item) == 0) // item "DATA" { - if (cv.HLogBuf==0) return 0; - - if (cv.LogBuf==NULL) - { - Unlock = TRUE; - cv.LogBuf = GlobalLock(cv.HLogBuf); - if (cv.LogBuf == NULL) return 0; - } - else Unlock = FALSE; - Len = DDEGetDataLen(); if ((SyncMode) && (SyncFreeSpace<Len)) @@ -275,12 +319,6 @@ DP[i] = 0; DdeUnaccessData(DH); } - - if (Unlock) - { - GlobalUnlock(cv.HLogBuf); - cv.LogBuf = NULL; - } } else return 0; @@ -288,8 +326,8 @@ return DH; } -HDDEDATA AcceptPoke(HSZ ItemHSz, UINT ClipFmt, - HDDEDATA Data) +static HDDEDATA AcceptPoke(HSZ ItemHSz, UINT ClipFmt, + HDDEDATA Data) { LPSTR DataPtr; DWORD DataSize; @@ -327,7 +365,7 @@ return DDE_FNOTPROCESSED; } -WORD HexStr2Word(PCHAR Str) +static WORD HexStr2Word(PCHAR Str) { int i; BYTE b; @@ -344,7 +382,7 @@ return w; } -HDDEDATA AcceptExecute(HSZ TopicHSz, HDDEDATA Data) +static HDDEDATA AcceptExecute(HSZ TopicHSz, HDDEDATA Data) { char Command[MaxStrLen + 1]; int i; @@ -997,9 +1035,9 @@ return (HDDEDATA)DDE_FACK; } -HDDEDATA CALLBACK DdeCallbackProc(UINT CallType, UINT Fmt, HCONV Conv, - HSZ HSz1, HSZ HSz2, HDDEDATA Data, - DWORD Data1, DWORD Data2) +static HDDEDATA CALLBACK DdeCallbackProc(UINT CallType, UINT Fmt, HCONV Conv, + HSZ HSz1, HSZ HSz2, HDDEDATA Data, + ULONG_PTR Data1, ULONG_PTR Data2) { HDDEDATA Result; @@ -1083,7 +1121,7 @@ Ok = TRUE; - if (DdeInitialize(&Inst,(PFNCALLBACK)DdeCallbackProc,0,0) == DMLERR_NO_ERROR) + if (DdeInitialize(&Inst,DdeCallbackProc,0,0) == DMLERR_NO_ERROR) { Service= DdeCreateStringHandle(Inst, ServiceName, CP_WINANSI); Topic = DdeCreateStringHandle(Inst, TopicName, CP_WINANSI); @@ -1102,7 +1140,7 @@ if (Ok) { - Ok = CreateLogBuf(); + Ok = DDECreateBuf(); if (Ok) DDELog = TRUE; } @@ -1154,7 +1192,7 @@ AdvFlag = FALSE; DDELog = FALSE; - FreeLogBuf(); + DDEFreeBuf(); cv.NoMsg = 0; } @@ -1162,7 +1200,7 @@ { if ((ConvH==0) || (! AdvFlag) || - (cv.DCount==0)) + (DDEGetCount() == 0)) return; if ((! SyncMode) || Modified: trunk/teraterm/teraterm/ttdde.h =================================================================== --- trunk/teraterm/teraterm/ttdde.h 2020-07-25 16:00:13 UTC (rev 8859) +++ trunk/teraterm/teraterm/ttdde.h 2020-07-25 16:00:24 UTC (rev 8860) @@ -28,26 +28,29 @@ */ /* TERATERM.EXE, DDE routines */ -#include <ddeml.h> #ifdef __cplusplus extern "C" { #endif -void SetTopic(); -BOOL InitDDE(); -void SendDDEReady(); -void EndDDE(); -void DDEAdv(); +void SetTopic(void); +BOOL InitDDE(void); +void SendDDEReady(void); +void EndDDE(void); +void DDEAdv(void); void EndDdeCmnd(int Result); void SetDdeComReady(WORD Ready); void RunMacro(PCHAR FName, BOOL Startup); extern char TopicName[21]; -extern HCONV ConvH; extern BOOL AdvFlag; extern BOOL CloseTT; +// DDE buffer +extern BOOL DDELog; +void DDEPut1(BYTE b); +int DDEGetCount(void); + #ifdef __cplusplus } #endif Modified: trunk/teraterm/teraterm/vtterm.c =================================================================== --- trunk/teraterm/teraterm/vtterm.c 2020-07-25 16:00:13 UTC (rev 8859) +++ trunk/teraterm/teraterm/vtterm.c 2020-07-25 16:00:24 UTC (rev 8860) @@ -57,6 +57,7 @@ #include "clipboar.h" #include "codeconv.h" #include "unicode.h" +#include "ttdde.h" #include "vtterm.h" @@ -454,6 +455,7 @@ static void Log1Byte(BYTE b) { LogPut1(b); + DDEPut1(b); } static void Log1UTF32(vtterm_work_t *vtterm, unsigned int u32) @@ -6381,6 +6383,12 @@ BYTE b; int c; + if (DDELog && DDEGetCount() >= InBuffSize - 10) { + /* \x83o\x83b\x83t\x83@\x82ɗ]\x97T\x82\xAA\x82Ȃ\xA2\x8Fꍇ */ + Sleep(1); + return 0; + } + c = CommRead1Byte(&cv,&b); if (c==0) return 0; Modified: trunk/teraterm/teraterm/vtwin.cpp =================================================================== --- trunk/teraterm/teraterm/vtwin.cpp 2020-07-25 16:00:13 UTC (rev 8859) +++ trunk/teraterm/teraterm/vtwin.cpp 2020-07-25 16:00:24 UTC (rev 8860) @@ -1365,7 +1365,7 @@ EnableMenuItem(ControlMenu,ID_CONTROL_CLOSETEK,MF_BYCOMMAND | MF_ENABLED); } - if ((ConvH!=0) || (FileVar!=NULL)) { + if (DDELog || (FileVar!=NULL)) { EnableMenuItem(ControlMenu,ID_CONTROL_MACRO,MF_BYCOMMAND | MF_GRAYED); EnableMenuItem(ControlMenu,ID_CONTROL_SHOW_MACRO,MF_BYCOMMAND | MF_ENABLED); } @@ -3629,14 +3629,13 @@ } } - if (DDELog || FileLog) { + if (DDELog) { + EndDDE(); + } + + if (FileLog) { if (! CreateLogBuf()) { - if (DDELog) { - EndDDE(); - } - if (FileLog) { - FileTransEnd(OpLog); - } + FileTransEnd(OpLog); } } Modified: trunk/teraterm/ttpcmn/ttcmn.c =================================================================== --- trunk/teraterm/ttpcmn/ttcmn.c 2020-07-25 16:00:13 UTC (rev 8859) +++ trunk/teraterm/ttpcmn/ttcmn.c 2020-07-25 16:00:24 UTC (rev 8860) @@ -1397,9 +1397,7 @@ return 0; } - if ((cv->HLogBuf!=NULL) && - ((cv->LCount>=InBuffSize-10) || - (cv->DCount>=InBuffSize-10))) { + if ((cv->HLogBuf!=NULL) && (cv->LCount>=InBuffSize-10)) { // \x8E\xA9\x95\xAA\x82̃o\x83b\x83t\x83@\x82ɗ]\x97T\x82\xAA\x82Ȃ\xA2\x8Fꍇ\x82́ACPU\x83X\x83P\x83W\x83\x85\x81[\x83\x8A\x83\x93\x83O\x82𑼂ɉA // CPU\x82\xAA\x83X\x83g\x81[\x83\x8B\x82\xB7\x82\xE9\x82̖h\x82\xAE\x81B // (2006.10.13 yutaka) @@ -2693,7 +2691,7 @@ /* - * + * * [return] * 1\x88ȏ\xE3 \x83A\x83v\x83\x8A\x82\xAA\x8Eg\x97p\x89\\x82\xC8COM\x83|\x81[\x83g\x82̑\x8D\x90\x94 * 0 \x83A\x83v\x83\x8A\x82\xAA\x8Eg\x97p\x89\\x82\xC8COM\x83|\x81[\x83g\x82\xAA\x82Ȃ\xA2 Modified: trunk/teraterm/ttpmacro/ttmdde.c =================================================================== --- trunk/teraterm/ttpmacro/ttmdde.c 2020-07-25 16:00:13 UTC (rev 8859) +++ trunk/teraterm/ttpmacro/ttmdde.c 2020-07-25 16:00:24 UTC (rev 8860) @@ -121,7 +121,7 @@ if (is_wait4all_enabled()) { put_macro_1byte(b); return; - } + } RingBuf[RBufPtr] = b; RBufPtr++; @@ -141,7 +141,7 @@ { if (is_wait4all_enabled()) { return read_macro_1byte(macro_shmem_index, b); - } + } if (RBufCount<=0) { return FALSE; @@ -199,8 +199,8 @@ } // CallBack Procedure for DDEML -HDDEDATA CALLBACK DdeCallbackProc(UINT CallType, UINT Fmt, HCONV Conv, - HSZ hsz1, HSZ hsz2, HDDEDATA Data, DWORD Data1, DWORD Data2) +static HDDEDATA CALLBACK DdeCallbackProc(UINT CallType, UINT Fmt, HCONV Conv, + HSZ hsz1, HSZ hsz2, HDDEDATA Data, ULONG_PTR Data1, ULONG_PTR Data2) { if (Inst==0) { return 0; @@ -266,7 +266,7 @@ WaitCount[i] = 0; } - if (DdeInitialize(&Inst, (PFNCALLBACK)DdeCallbackProc, + if (DdeInitialize(&Inst, DdeCallbackProc, APPCMD_CLIENTONLY | CBF_SKIP_REGISTRATIONS | CBF_SKIP_UNREGISTRATIONS,0) @@ -480,7 +480,7 @@ PWaitStr[Index-1] = _strdup(Str); - if (PWaitStr[Index-1]) + if (PWaitStr[Index-1]) WaitStrLen[Index-1] = strlen(Str); else WaitStrLen[Index-1] = 0; @@ -661,10 +661,10 @@ } -// 'wait': +// 'wait': // ttmacro process sleeps to wait specified word(s). -// -// 'waitregex': +// +// 'waitregex': // ttmacro process sleeps to wait specified word(s) with regular expression. // // add 'waitregex' command (2005.10.5 yutaka) @@ -1049,7 +1049,7 @@ SendCmnd(OpId,0); Data = DdeClientTransaction(NULL,0,ConvH,Item2,CF_OEMTEXT,XTYP_REQUEST,5000,NULL); if (Data == 0) { - // \x83g\x83\x89\x83\x93\x83U\x83N\x83V\x83\x87\x83\x93\x82\xF0\x8AJ\x8En\x82ł\xAB\x82Ȃ\xA2\x82Ƃ\xAB\x82̓G\x83\x89\x81[\x82Ƃ\xB7\x82\xE9\x81B(2016.10.22 yutaka) + // \x83g\x83\x89\x83\x93\x83U\x83N\x83V\x83\x87\x83\x93\x82\xF0\x8AJ\x8En\x82ł\xAB\x82Ȃ\xA2\x82Ƃ\xAB\x82̓G\x83\x89\x81[\x82Ƃ\xB7\x82\xE9\x81B(2016.10.22 yutaka) return 0; } DataPtr = (PCHAR)DdeAccessData(Data,NULL);