#pragma once // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 CODEACQUNIT_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // CODEACQUNIT_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #ifndef CODEACQUNIT_EXPORTS #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "CodeAcqUnitX64D.lib") #else #pragma comment(lib, "CodeAcqUnitX64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "CodeAcqUnitD.lib") #else #pragma comment(lib, "CodeAcqUnit.lib") #endif #endif #endif #ifdef CODEACQUNIT_EXPORTS #define CODEACQUNIT_API __declspec(dllexport) #define CODEACQUNIT_C_API extern "C" __declspec(dllexport) #else #define CODEACQUNIT_API __declspec(dllimport) #define CODEACQUNIT_C_API extern "C" __declspec(dllimport) #endif #include "ResDataObject.h" #include "LogicDevice.h" #include "AutoFunc.h" // 此类是从 CodeAcqUnit.dll 导出的 class CODEACQUNIT_API CodeAcqUnit :public LogicDevice { bool m_EnterMethod; WindowObject *m_pPreLoginObj; WindowObject *m_pLoginObj; WindowObject *m_pMainObj; WindowObject *m_pDownloadObj; WindowObject *m_pDownloadFinishDlgObj; WindowObject *m_pSelectObj; WindowObject *m_pExitAskObj; WindowObject *m_pShouPanObj; string *m_pProcessPath; string *m_pDevicePath; BaseJsonDataObject* m_HitMainWind; BaseJsonDataObject* m_L2Loop; BaseJsonDataObject* m_L2LeftCount; BaseJsonDataObject* m_Tick; void SelectFormula(DWORD TabIdx, DWORD FirstLevel, DWORD SecondLevel); void SelectFormula(DWORD TabIdx, const char *pszName); void SelectFormulaPeriod(BOOL FenB); void DoFormulaRun(); INT AlreadySaved(UINT64 &SavedDay); bool SaveTheDayAsLastDay(UINT64 TheDay); public: CodeAcqUnit(void); virtual ~CodeAcqUnit(void); void SetProcessPath(const char *pPath, const char *pDevPath); //get device type virtual bool SYSTEM_CALL GetDeviceType(GUID &DevType); //get device resource virtual RET_STATUS SYSTEM_CALL GetDeviceResource(ResDataObject PARAM_OUT *pDeviceResource); //ResourceCommand Request In and Response Out virtual RET_STATUS SYSTEM_CALL Request(ResDataObject PARAM_IN *pRequest, ResDataObject PARAM_OUT *pResponse); //notify to lower layer virtual RET_STATUS SYSTEM_CALL CmdToLogicDev(ResDataObject PARAM_IN *pCmd); virtual void SYSTEM_CALL CompleteInit(); BOOL InitWindowObjects(BOOL expThrow); void ClearWindowObjects(); virtual void SYSTEM_CALL CompleteUnInit(); bool SYSTEM_CALL GetLatestL2CodeUpdateTime(UINT64 &time, char *pszCode); bool SYSTEM_CALL PrevUpdate(UINT64 &time, bool Get); bool SYSTEM_CALL GetCurrentUpdateTime(UINT64 &time); virtual RET_STATUS DATA_ACTION GetSEQResource(ResDataObject*res); virtual RET_STATUS DATA_ACTION Login(); virtual RET_STATUS DATA_ACTION EnterMainWind(DWORD waittime = 1000, bool Force = false); virtual RET_STATUS DATA_ACTION DownloadFullData(); virtual RET_STATUS DATA_ACTION GetFinData(); virtual RET_STATUS DATA_ACTION GetNormalData(); virtual RET_STATUS DATA_ACTION GetHandData(); //Step1:清除原始数据,包含目标进程的文件 virtual RET_STATUS DATA_ACTION ClearL2Info(); //Step2:获取Code表 virtual RET_STATUS DATA_ACTION GetL2Candidates(DWORD &TotalCount); //Step3:如名 virtual RET_STATUS DATA_ACTION EnterRealTimeAcq(); //Step4:跳到下一个Code,DBIF中要保存Last L2 Code相关的信息. //在跳之前Save OldCode,进行跳转,等待NewCode的更新. //Lastupdatetime -> Delay 200-500ms ->no update,算完成. virtual RET_STATUS DATA_ACTION LoopL2Candidates(bool afterClose, char *szUpdatedCode); virtual RET_STATUS DATA_ACTION SaveFullData(); virtual RET_STATUS DATA_ACTION EnterCMD(const char* pszCMD); //1.check Hit MainWind //2.enter code //3.等待NewCode的更新. virtual RET_STATUS DATA_ACTION EnterL2Code(const char* pszCode); virtual RET_STATUS DATA_ACTION RunPool(); virtual RET_STATUS DATA_ACTION RunARound(); virtual RET_STATUS DATA_ACTION LogOut(); };