From 3ce48f6dbeb537e252edb0d62c88a28796e36674 Mon Sep 17 00:00:00 2001
From: SWK <sungwk82@diteam.co.kr>
Date: 월, 26 12월 2022 15:04:42 +0900
Subject: [PATCH] ongoing60 #4403 CF AOI Review TACT 지연 개선 1. 신호 출력 방식 재개선  - 유지 시간이 없는 신호는 바로 출력 진행하도록 변경 2. 불필요 Delay 제거 및 시퀀스 변경  - 얼라인 측정 종료 처리 간 제어 신호 먼저 출력 후 카메라 Stop으로 변경  - 물류 정보 읽기 처리 후 1000ms Delay 삭제  - 얼라인 측정 시작(카메라 Live Start) 후 Delay 300ms -> 100ms(이미지 들어오는 시간 확보 필요)  - ReadRawFile 처리 시작 전 500ms Delay 삭제  - Path Scheduling 완료 후 Review Ready 신호 출력 전 1000ms Delay 삭제 3. 버그 수정  - 이미지 저장 경로 생성 간 예외 처리 부분 버그 수정 4. 로그 시간 출력 불합리 개선  - 로그 시간이 파일 출력 시점으로 작성되어 로그 스래드 지연 시 시간이 맞지 않는 불합리 있음  - 로그 시간은 로그 발생 시점에 시간 저장, 해당 시간 이용하여 파일에 기록하도록 변경

---
 ReviewSystem/ReviewSystem/DisplayMessage.h                                |   22 +++++-
 ReviewSystem/ReviewSystem/DisplayMessage.cpp                              |   55 ++++++++++++-----
 ReviewSystem/bin/ReviewSystem.exe                                         |    0 
 ReviewSystem/bin/CHSignalControls_x64_vc15.pdb                            |    0 
 ReviewSystem/CHSignalControls/SignalControl_DitSharedMemorySync.cpp       |   41 +++++++++++--
 ReviewSystem/ReviewSystem/ReviewInterface.cpp                             |    2 
 ReviewSystem/include/CHSignalControls/SignalControl_DitSharedMemorySync.h |    5 +
 ReviewSystem/ReviewSystem/CameraControlAlign.cpp                          |    3 
 ReviewSystem/bin/ReviewSystem.pdb                                         |    0 
 ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp                      |   27 ++++++--
 ReviewSystem/lib/CHSignalControls_x64_vc15.lib                            |    0 
 ReviewSystem/bin/CHSignalControls_x64_vc15.dll                            |    0 
 12 files changed, 117 insertions(+), 38 deletions(-)

diff --git a/ReviewSystem/CHSignalControls/SignalControl_DitSharedMemorySync.cpp b/ReviewSystem/CHSignalControls/SignalControl_DitSharedMemorySync.cpp
index bc35c12..20ec966 100644
--- a/ReviewSystem/CHSignalControls/SignalControl_DitSharedMemorySync.cpp
+++ b/ReviewSystem/CHSignalControls/SignalControl_DitSharedMemorySync.cpp
@@ -191,6 +191,13 @@
 // 		return m_pSignalThread->AddThreadData(signalData);
 // 	}
 // 
+	/*< SWK 20221226 - #4403 ADD Start >*/
+	if (0 == nOnTime)
+	{
+		Write_SendSignal(nAddrIndex, nSignalIndex, wSignalValue != 0);
+		return TRUE;
+	}
+	/*< SWK 20221226 - #4403 ADD End >*/
 	if (m_pSignalThread == NULL) return FALSE;
 
 	CSignalData signalData;
@@ -202,6 +209,21 @@
 	return m_pSignalThread->AddThreadData(signalData);
 	/*< SWK 20221221 - #4403 MOD End >*/
 }
+
+/*< SWK 20221226 - #4403 ADD Start >*/
+inline void CSignalControl_DitSharedMemorySync::Write_SendSignal(int nAddrIndex, int nSignalIndex, bool bOn)
+{
+	int nAddress = m_pSendSignalValueAddr[nAddrIndex];
+	WORD wSendValue = 1 << nSignalIndex;
+
+	WORD wCurValue = 0;
+	CSingleLock localLock(&m_csWriteSignal, TRUE);
+	memcpy(&wCurValue, m_pMemStartAddr + nAddress, sizeof(WORD));
+	if (bOn)	wCurValue |= wSendValue;
+	else		wCurValue &= ~wSendValue;
+	memcpy(m_pMemStartAddr + nAddress, &wCurValue, sizeof(WORD));
+}
+/*< SWK 20221226 - #4403 ADD End >*/
 
 void CSignalControl_DitSharedMemorySync::IST2P_RunThreadProcess(const CSignalData& signalData)
 {
@@ -266,15 +288,18 @@
 		m_pSignalThread->AddThreadData(NewSignalData);
 		return;
 	}
+	/*< SWK 20221226 - #4403 MOD Start >*/
+// 	int nAddress = m_pSendSignalValueAddr[signalData.nAddrIndex];
+// 	WORD wSendValue = 1 << signalData.nSignalIndex;
+// 
+// 	WORD wCurValue = 0;
+// 	memcpy(&wCurValue, m_pMemStartAddr + nAddress, sizeof(WORD));
+// 	if (true == signalData.wSignalValue)	wCurValue |= wSendValue;
+// 	else									wCurValue &= ~wSendValue;
+// 	memcpy(m_pMemStartAddr + nAddress, &wCurValue, sizeof(WORD));
 
-	int nAddress = m_pSendSignalValueAddr[signalData.nAddrIndex];
-	WORD wSendValue = 1 << signalData.nSignalIndex;
-
-	WORD wCurValue = 0;
-	memcpy(&wCurValue, m_pMemStartAddr + nAddress, sizeof(WORD));
-	if (true == signalData.wSignalValue)	wCurValue |= wSendValue;
-	else									wCurValue &= ~wSendValue;
-	memcpy(m_pMemStartAddr + nAddress, &wCurValue, sizeof(WORD));
+	Write_SendSignal(signalData.nAddrIndex, signalData.nSignalIndex, signalData.wSignalValue != 0);
+	/*< SWK 20221226 - #4403 MOD End >*/
 	/*< SWK 20221221 - #4403 MOD End >*/
 }
 
diff --git a/ReviewSystem/ReviewSystem/CameraControlAlign.cpp b/ReviewSystem/ReviewSystem/CameraControlAlign.cpp
index 8e2f5d0..c9a8055 100644
--- a/ReviewSystem/ReviewSystem/CameraControlAlign.cpp
+++ b/ReviewSystem/ReviewSystem/CameraControlAlign.cpp
@@ -766,7 +766,8 @@
 		time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
 	pAlignFinder->SaveResultImage(strPath);
 
-	Sleep(10);
+	//< SWK 20221226 - #4403 DEL >
+//	Sleep(10);
 	if (nCameraIdx == 0)
 	{
 		m_AlignResult.strAlignFirest = strPath;
diff --git a/ReviewSystem/ReviewSystem/DisplayMessage.cpp b/ReviewSystem/ReviewSystem/DisplayMessage.cpp
index 0ba0382..a223f03 100644
--- a/ReviewSystem/ReviewSystem/DisplayMessage.cpp
+++ b/ReviewSystem/ReviewSystem/DisplayMessage.cpp
@@ -73,8 +73,14 @@
 // 	{
 // 		m_pDM2P->DM2P_DisplayMessage(strMessage);
 // 	}
-	CString* pstrLog = new CString(strMessage);
-	PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast<WPARAM>(pstrLog), 0);
+	/*< SWK 20221226 - #4403 MOD Start >*/
+// 	CString* pstrLog = new CString(strMessage);
+// 	PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast<WPARAM>(pstrLog), 0);
+	pLogData plogdata = new LogData;
+	::GetLocalTime(&plogdata->currentTime);
+	plogdata->strLog = strMessage;
+	PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast<WPARAM>(plogdata), 0);
+	/*< SWK 20221226 - #4403 MOD End >*/
 
 }
 // #3417 LYWCF AOI Review �쟾�꽕鍮� Log Process媛쒖꽑 ADD END
@@ -90,8 +96,14 @@
 		_vstprintf_s(strText, lpstrFormat, list);
 		va_end(list);
 
-		CString* pstrLog = new CString(strText);
-		PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast<WPARAM>(pstrLog), 0);
+		/*< SWK 20221226 - #4403 MOD Start >*/
+// 		CString* pstrLog = new CString(strText);
+// 		PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast<WPARAM>(pstrLog), 0);
+		pLogData plogdata = new LogData;
+		::GetLocalTime(&plogdata->currentTime);
+		plogdata->strLog = strText;
+		PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast<WPARAM>(plogdata), 0);
+		/*< SWK 20221226 - #4403 MOD End >*/
 	}
 	catch (...)
 	{
@@ -109,23 +121,28 @@
 // #3417 LYWCF AOI Review �쟾�꽕鍮� Log Process媛쒖꽑 ADD END
 
 // #3417 LYWCF AOI Review �쟾�꽕鍮� Log Process媛쒖꽑 ADD START
-void CDisplayMessage::ThreadDisplayMessage(const CString& strMessage)
+//< SWK 20221226 - #4403 MOD >
+//void CDisplayMessage::ThreadDisplayMessage(const CString& strMessage)
+void CDisplayMessage::ThreadDisplayMessage(const LogData& logdata)
 {
-	WriteToFile(strMessage);
+	WriteToFile(logdata.currentTime, logdata.strLog);
 
 	if (m_pDM2P)
 	{
-		m_pDM2P->DM2P_DisplayMessage(strMessage);
+		m_pDM2P->DM2P_DisplayMessage(logdata.strLog);
 	}
 }
-
-BOOL CDisplayMessage::WriteToFile(const CString& strMessage)
+//< SWK 20221226 - #4403 MOD >
+//BOOL CDisplayMessage::WriteToFile(const CString& strMessage)
+BOOL CDisplayMessage::WriteToFile(const SYSTEMTIME& t, const CString& strMessage)
 {
 	if(m_pFileLog == NULL)	return FALSE;
 
 	//EnterCriticalSection(&m_csLog);
 
-	CTime	time = CTime::GetCurrentTime();
+	//< SWK 20221226 - #4403 MOD >
+//	CTime	time = CTime::GetCurrentTime();
+	CTime	time(t);
 	CString	strTimeStamp = _T("");
 	// �궇吏쒓� 諛붾�뚮㈃ �뙆�씪紐낆쓣 媛깆떊�빐�꽌 �벖�떎.
 	if ((time.GetMonth() != m_TimeLogFile.GetMonth()) || (time.GetDay() != m_TimeLogFile.GetDay()) || !m_pFileLog)
@@ -139,9 +156,7 @@
 		//strTimeStamp.Format(_T("[%02d:%02d:%02d]"), time.GetHour(), time.GetMinute(), time.GetSecond());
 		/*< SWK 20221221 - #4403 MOD Start >*/
 //		strTimeStamp.Format(_T("[%02d:%02d:%02d_%02d:%02d:%02d]"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
-		SYSTEMTIME   currentTime;
-		::GetLocalTime(&currentTime);
-		strTimeStamp.Format(_T("[%02d:%02d:%02d_%02d:%02d:%02d.%03d]"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond(), currentTime.wMilliseconds);
+		strTimeStamp.Format(_T("[%02d:%02d:%02d_%02d:%02d:%02d.%03d]"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond(), t.wMilliseconds);
 		/*< SWK 20221221 - #4403 MOD End >*/
 #ifdef UNICODE
 		strLog.Format(_T("%c%s %s\r\n"), strCommand, strTimeStamp, strMessage);
@@ -159,18 +174,24 @@
 	return TRUE;
 }
 
-DWORD RunThreadDisplayLog(LPVOID param)
+DWORD CDisplayMessage::RunThreadDisplayLog(LPVOID param)
 {
 	MSG msg;
 	while (GetMessage(&msg, NULL, 0, 0))
 	{
-		CString* pstrLog = reinterpret_cast<CString*>(msg.wParam);
+		//< SWK 20221226 - #4403 MOD >
+//		CString* pstrLog = reinterpret_cast<CString*>(msg.wParam);
+		CDisplayMessage::pLogData plogdata = reinterpret_cast<CDisplayMessage::pLogData>(msg.wParam);
 		switch (msg.message)
 		{
 		case WM_DIPLAY_LOG:
 			
-			g_pLog->ThreadDisplayMessage(*pstrLog);
-			delete pstrLog;
+			/*< SWK 20221226 - #4403 MOD Start >*/
+// 			g_pLog->ThreadDisplayMessage(*pstrLog);
+// 			delete pstrLog;
+			g_pLog->ThreadDisplayMessage(*plogdata);
+			delete plogdata;
+			/*< SWK 20221226 - #4403 MOD End >*/
 			break;
 
 		default:
diff --git a/ReviewSystem/ReviewSystem/DisplayMessage.h b/ReviewSystem/ReviewSystem/DisplayMessage.h
index 4c5800c..70533f9 100644
--- a/ReviewSystem/ReviewSystem/DisplayMessage.h
+++ b/ReviewSystem/ReviewSystem/DisplayMessage.h
@@ -11,10 +11,16 @@
 	virtual void	DM2P_DisplayMessage(const TCHAR* lpstrFormat, ...) = 0;
 };
 
-DWORD RunThreadDisplayLog(LPVOID param);
 
 class CDisplayMessage : public Singleton<CDisplayMessage>
 {
+	/*< SWK 20221226 - #4403 ADD Start >*/
+	typedef struct _Log_Data
+	{
+		SYSTEMTIME	currentTime;
+		CString		strLog;
+	}LogData, *pLogData;
+	/*< SWK 20221226 - #4403 ADD End >*/
 public:
 	CDisplayMessage(const CString& strPath);
 	virtual ~CDisplayMessage(void);
@@ -22,13 +28,19 @@
 public:
 	void	SetDM2P(IDisplayMessage2Parent* pDM2P)		{ m_pDM2P = pDM2P; }
 	void	SetPath(const CString& strPath);
-	BOOL	MakeLogFile();
-	BOOL	WriteToFile(const CString& strMessage);
 	void	DisplayMessage(const CString& strMessage);
 	void	DisplayMessage(const TCHAR* lpstrFormat, ...);
-	void	ThreadDisplayMessage(const CString & strMessage);
+	//< SWK 20221226 - #4403 MOD >
+//	void	ThreadDisplayMessage(const CString & strMessage);
+	void	ThreadDisplayMessage(const LogData& logdata);
+protected:
+	BOOL	MakeLogFile();
+	//< SWK 20221226 - #4403 MOD >
+//	BOOL	WriteToFile(const CString& strMessage);
+	BOOL	WriteToFile(const SYSTEMTIME& time, const CString& strMessage);
 
-public:
+	static DWORD	RunThreadDisplayLog(LPVOID param);
+private:
 	CTime						m_TimeLogFile;
 	CFile*						m_pFileLog;
 	CString						m_strLogPath;
diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.cpp b/ReviewSystem/ReviewSystem/ReviewInterface.cpp
index c1b86eb..944250b 100644
--- a/ReviewSystem/ReviewSystem/ReviewInterface.cpp
+++ b/ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -732,6 +732,7 @@
 				bRetFTPUploader = TRUE;
 			}
 		}
+		Sleep(1);
 		//Dit Glass Raw Messenger S/W Version
 		if (bRetGRM == FALSE)
 		{
@@ -741,6 +742,7 @@
 				bRetGRM = TRUE;
 			}
 		}
+		Sleep(1);
 		//Dit Shared Memory Sync Client S/W Version Start
 		if (bRetSync == FALSE)
 		{
diff --git a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
index d9e48c2..4885de2 100644
--- a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
+++ b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -550,10 +550,16 @@
 		m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Fail Data!"));
 	}
 
-	AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence 蹂�寃�
-
+	/*< SWK 20221226 - #4403 MOD Start >*/
+// 	AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence 蹂�寃�
+// 
+// 	SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
+// 	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
 	SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
 	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
+
+	AlignCamera_CameraControl(CameraControlStop);
+	/*< SWK 20221226 - #4403 MOD End >*/
 
 	// LJY-20180905
 	m_pSP2P->ISP2P_UpdateAlignResultStatus(0, pGlassResult);
@@ -1101,7 +1107,8 @@
 			/*bFileFind = FindRawBinFile(strFileName);*/
 
 			pDitRawClient->SetReviewStart();
-			Sleep(1000);
+			//< SWK 20221226 - #4403 DEL >
+//			Sleep(1000);
 
  			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Transfer Data Read Success!"));
  
@@ -1318,7 +1325,8 @@
 	}
 	//#3561 210908 LYW ADD End
 
-	Sleep(300);
+	//< SWK 20221226 - #4403 MOD >
+	Sleep(100);
 
 	//original
 // 	if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_AlignStartAck_CPJT))
@@ -1440,7 +1448,9 @@
 	
 	//pDitRawClient->SetReviewStart();
 
-	Sleep(500);
+	//< SWK 20221226 - #4403 DEL >
+//	Sleep(500);
+
 	//CString strJudgeData;
 	m_pSP2P->ISP2P_GetSignalControl()->WriteData(_T("17110"), sizeof(pDitRawClient->GetGlassData()->m_strGlassJudge), pDitRawClient->GetGlassData()->m_strGlassJudge);
 	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] ReadRawFile!"));
@@ -1501,7 +1511,8 @@
 		int nTotalPlanCount = CalculatePlanData(pGlassResult);
 		m_pSP2P->ISP2P_DisplayMessage(_T("[Read Raw File] Review All Plan Total Count : %d"), nTotalPlanCount);
 
-		Sleep(1000);
+		//< SWK 20221226 - #4403 DEL >
+//		Sleep(1000);
 		// send review ready
 		//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 MOD START
 		if (GetSimulationMode() == FALSE)
@@ -3674,7 +3685,9 @@
 			tmServerLoadingTime = CTime::GetCurrentTime();
 			m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] access Shared Memory Fail"));
 			strPath.Format(_T("%s\\%s_%04d%02d%02d%02d%02d%02d"), pNetworkInfo->m_strUploadImagePath, strGlassID, tmServerLoadingTime.GetYear(), tmServerLoadingTime.GetMonth(), tmServerLoadingTime.GetDay(), tmServerLoadingTime.GetHour(), tmServerLoadingTime.GetMinute(), tmServerLoadingTime.GetSecond());
-			strImagePath.Format(_T("%s\\%s_%04d%02d%02d%02d%02d%02d"), strGlassID, tmServerLoadingTime.GetYear(), tmServerLoadingTime.GetMonth(), tmServerLoadingTime.GetDay(), tmServerLoadingTime.GetHour(), tmServerLoadingTime.GetMinute(), tmServerLoadingTime.GetSecond());
+			//< SWK 20221226 - #4403 MOD >
+//			strImagePath.Format(_T("%s\\%s_%04d%02d%02d%02d%02d%02d"), strGlassID, tmServerLoadingTime.GetYear(), tmServerLoadingTime.GetMonth(), tmServerLoadingTime.GetDay(), tmServerLoadingTime.GetHour(), tmServerLoadingTime.GetMinute(), tmServerLoadingTime.GetSecond());
+			strImagePath.Format(_T("%s_%04d%02d%02d%02d%02d%02d"), strGlassID, tmServerLoadingTime.GetYear(), tmServerLoadingTime.GetMonth(), tmServerLoadingTime.GetDay(), tmServerLoadingTime.GetHour(), tmServerLoadingTime.GetMinute(), tmServerLoadingTime.GetSecond());
 			CreateDirectory(strPath, NULL);
 			pReviewProcessor->SetUploadImagePath(strPath);
 			pReviewProcessor->SetReviewImagePath(strImagePath);
diff --git a/ReviewSystem/bin/CHSignalControls_x64_vc15.dll b/ReviewSystem/bin/CHSignalControls_x64_vc15.dll
index 9b04048..edabec8 100644
--- a/ReviewSystem/bin/CHSignalControls_x64_vc15.dll
+++ b/ReviewSystem/bin/CHSignalControls_x64_vc15.dll
Binary files differ
diff --git a/ReviewSystem/bin/CHSignalControls_x64_vc15.pdb b/ReviewSystem/bin/CHSignalControls_x64_vc15.pdb
index 4286b2a..9626f6f 100644
--- a/ReviewSystem/bin/CHSignalControls_x64_vc15.pdb
+++ b/ReviewSystem/bin/CHSignalControls_x64_vc15.pdb
Binary files differ
diff --git a/ReviewSystem/bin/ReviewSystem.exe b/ReviewSystem/bin/ReviewSystem.exe
index bad3dcb..195b9fa 100644
--- a/ReviewSystem/bin/ReviewSystem.exe
+++ b/ReviewSystem/bin/ReviewSystem.exe
Binary files differ
diff --git a/ReviewSystem/bin/ReviewSystem.pdb b/ReviewSystem/bin/ReviewSystem.pdb
index 391ff2a..aa837ae 100644
--- a/ReviewSystem/bin/ReviewSystem.pdb
+++ b/ReviewSystem/bin/ReviewSystem.pdb
Binary files differ
diff --git a/ReviewSystem/include/CHSignalControls/SignalControl_DitSharedMemorySync.h b/ReviewSystem/include/CHSignalControls/SignalControl_DitSharedMemorySync.h
index 4a62bfb..cf654d5 100644
--- a/ReviewSystem/include/CHSignalControls/SignalControl_DitSharedMemorySync.h
+++ b/ReviewSystem/include/CHSignalControls/SignalControl_DitSharedMemorySync.h
@@ -14,6 +14,11 @@
 
 	virtual BOOL	Read_ReceiveSignal(int nAddrIndex, WORD& dwValue);
 	virtual BOOL	Write_SendSignal(int nAddrIndex, int nSignalIndex, WORD wSignalValue, int nOnTime=1000);
+	/*< SWK 20221226 - #4403 ADD Start >*/
+protected:
+	inline void		Write_SendSignal(int nAddrIndex, int nSignalIndex, bool bOn);
+public:
+	/*< SWK 20221226 - #4403 ADD End >*/
 	virtual BOOL	Read_SendSignal(int nAddrIndex, WORD& dwValue);
 	virtual BOOL	ReadData(const CString strAddr, int nSize, CString& strData);
 	virtual BOOL	ReadData(const CString strAddr, int nSize, char* pData);
diff --git a/ReviewSystem/lib/CHSignalControls_x64_vc15.lib b/ReviewSystem/lib/CHSignalControls_x64_vc15.lib
index d6d1993..ce2773d 100644
--- a/ReviewSystem/lib/CHSignalControls_x64_vc15.lib
+++ b/ReviewSystem/lib/CHSignalControls_x64_vc15.lib
Binary files differ

--
Gitblit v1.9.3