// KonicaObject.h: CKonicaObject 的声明 #pragma once #include "resource.h" // 主符号 #include "KonicaCom_i.h" #include "_IKonicaObjectEvents_CP.h" #include "KonicaInterface.h" #include #include "Include/AerosdkDefine.h" #include "Include/AerosdkError.h" #include "Include/AerosdkStruct.h" #include "Include/AerosdkFunction.h" #include "CShareMemManager.h" #include #include #if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA) #error "Windows CE 平台(如不提供完全 DCOM 支持的 Windows Mobile 平台)上无法正确支持单线程 COM 对象。定义 _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA 可强制 ATL 支持创建单线程 COM 对象实现并允许使用其单线程 COM 对象实现。rgs 文件中的线程模型已被设置为“Free”,原因是该模型是非 DCOM Windows CE 平台支持的唯一线程模型。" #endif using namespace ATL; using namespace std; typedef enum _Sync_Mode { SYNC_MANUAL = 0, SYNC_SOFTWARE = 1, SYNC_HARDWARE = 2, //带ZSKK同步盒的硬同步 SYNC_AED = 3, SYNC_HARDWARE_DIRECT = 4, //探测器、发生器直连的硬同步 SYNC_MAX = 5, }SYNC_MODE; // CKonicaObject class ATL_NO_VTABLE CKonicaObject : public CComObjectRootEx, public CComCoClass, public IConnectionPointContainerImpl, public CProxy_IKonicaObjectEvents, public IDispatchImpl { public: CKonicaObject(); ~CKonicaObject(); DECLARE_REGISTRY_RESOURCEID(106) BEGIN_COM_MAP(CKonicaObject) COM_INTERFACE_ENTRY(IKonicaObject) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IConnectionPointContainer) END_COM_MAP() BEGIN_CONNECTION_POINT_MAP(CKonicaObject) CONNECTION_POINT_ENTRY(__uuidof(_IKonicaObjectEvents)) END_CONNECTION_POINT_MAP() DECLARE_PROTECT_FINAL_CONSTRUCT() HRESULT FinalConstruct() { return S_OK; } void FinalRelease() { } //void TriggerEvent(int nEventType, int nParam, WORD* pImageBuffer, int nBufferSize); void CallBackEvent(int nType, unsigned int uintParam, char* pstrPanelId, int nXgboxNo); bool TestError(int nRet, const char* szFuncName = "Func", bool bShowTrue = true); void Initialize(); bool WriteNotifyMessageToShareMemory(int nEventType, long nStartPosition, int nParam, WORD* pImageBuffer, int nBufferSize); void SaveRawFunc(WORD* pInImg, char* strFileName, int nImgWidth, int nImgHeight); bool WaitRespond(int nTimeOut = 30000, const char* szAction = ""); void StopWaiting(const char* szAction = ""); string GetStrEventType(int nEventType); string GetStrPanelStatus(int nPanelStatus); bool ImageResend(int nImageNo); bool ImageDelete(int nImageNo); public: //组件对外提供的接口 STDMETHOD(LoadDLL)(BSTR strSdkPath); STDMETHOD(SetPanelType)(BSTR strPanelType); //STDMETHOD(SetCallBack)(ICallBackObject* pCallBack); //STDMETHOD(ReleaseCallBack)(); STDMETHOD(OpenSdk)(); STDMETHOD(OpenPanel)(); STDMETHOD(OpenXgBox)(int nXgBoxNo); STDMETHOD(CloseSdk)(); STDMETHOD(ClosePanel)(); STDMETHOD(CloseXgBox)(); STDMETHOD(SetPanelResolution)(int nResolution); STDMETHOD(GetPanelResolution)(int* pResolution); STDMETHOD(GetImageSize)(int nSizeMode, int nResolution, int* pWidth, int* pHeight); STDMETHOD(GetPanelSettingInfo)(CHAR* strPanelID, int* nPanelSize); STDMETHOD(GetPanelVersionInfo)(unsigned char* pDllVersion, unsigned char* pAllVersion, unsigned char* pFwComnBootVersion, unsigned char* pFwComnVersion, unsigned char* pFwPowerBootVersion, unsigned char* pFwPowerVersion, unsigned char* pFpgaVersion); STDMETHOD(GetPanelConservationInfo)(unsigned int* pShootCount); STDMETHOD(GetCradleConservationInfo)(int* pConnectCount); STDMETHOD(StartExposureSequenceIt)(int nXgBoxNo,int nImageNo,int nSyncMode,int nIntegrationTime); STDMETHOD(GetPanelStatusInfo)(int* pPanelStatus); STDMETHOD(CancelExposureSequence)(int nImageNo); STDMETHOD(SetSyncMode)(int nSyncMode); STDMETHOD(GetPanelBatteryInfo)(int* pBatteryValue, int* pBatteryStatus); STDMETHOD(GetPanelSignalInfo)(int* pSignalStrength); STDMETHOD(GetQueueData)(int* pMessageType); STDMETHOD(CheckImageEx)(int* pImageNo, int* pResolution); private: std::queue m_queue; std::mutex mtx; CShareMem* m_pDataBuffer; ICallBackObject* m_pCallBackObject; StAerosdkLogInfo m_stLogInfo; char strAeroSDKini[MAX_PATH] = { 0 }; char strPanelLog[MAX_PATH] = { 0 }; char strXGBOXLog[MAX_PATH] = { 0 }; char strECBLog[MAX_PATH] = { 0 }; string m_strSdkPath; string m_strPanelType; int m_nXgboxNo; int m_nSyncMode; bool m_bOpenSdk; bool m_bConnect; bool m_bConnectXgbox; int m_nDetectorStatus; int m_nImageNo; int m_nPreImgWidth; int m_nPreImgHeight; int m_nRawImgWidth; int m_nRawImgHeight; WORD* m_pPreImgBuffer1; //预览图buffer WORD* m_pPreImgBuffer2; //预览图buffer WORD* m_pRawImgBuffer; //原始图buffer HANDLE m_hRespond;//用于等待某个状态的到来或者某个动作的完成 int m_nResolution;//当前分辨率 bool m_bHaveImageInDetector;//探测器内是否有图像 }; OBJECT_ENTRY_AUTO(__uuidof(KonicaObject), CKonicaObject)