// CCardReaderControl.h : Declaration of the CCCardReaderControl #pragma once #include "resource.h" // main symbols #include #include "CardReaderControl.h" #include "SocketComm.h" // CCCardReaderControl class ATL_NO_VTABLE CCCardReaderControl : public CComObjectRootEx, public CStockPropImpl, public IPersistStreamInitImpl, public IOleControlImpl, public IOleObjectImpl, public IOleInPlaceActiveObjectImpl, public IViewObjectExImpl, public IOleInPlaceObjectWindowlessImpl, public ISupportErrorInfo, public IPersistStorageImpl, public ISpecifyPropertyPagesImpl, public IQuickActivateImpl, public IDataObjectImpl, public IProvideClassInfo2Impl<&CLSID_CCardReaderControl, NULL, &LIBID_CardReaderControlLib>, public CComCoClass, public CComControl { public: CCCardReaderControl() { } DECLARE_OLEMISC_STATUS(OLEMISC_RECOMPOSEONRESIZE | OLEMISC_CANTLINKINSIDE | OLEMISC_INSIDEOUT | OLEMISC_ACTIVATEWHENVISIBLE | OLEMISC_SETCLIENTSITEFIRST ) DECLARE_REGISTRY_RESOURCEID(IDR_CCARDREADERCONTROL) BEGIN_COM_MAP(CCCardReaderControl) COM_INTERFACE_ENTRY(ICCardReaderControl) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IViewObjectEx) COM_INTERFACE_ENTRY(IViewObject2) COM_INTERFACE_ENTRY(IViewObject) COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless) COM_INTERFACE_ENTRY(IOleInPlaceObject) COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless) COM_INTERFACE_ENTRY(IOleInPlaceActiveObject) COM_INTERFACE_ENTRY(IOleControl) COM_INTERFACE_ENTRY(IOleObject) COM_INTERFACE_ENTRY(IPersistStreamInit) COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit) COM_INTERFACE_ENTRY(ISupportErrorInfo) COM_INTERFACE_ENTRY(ISpecifyPropertyPages) COM_INTERFACE_ENTRY(IQuickActivate) COM_INTERFACE_ENTRY(IPersistStorage) COM_INTERFACE_ENTRY(IDataObject) COM_INTERFACE_ENTRY(IProvideClassInfo) COM_INTERFACE_ENTRY(IProvideClassInfo2) END_COM_MAP() BEGIN_PROP_MAP(CCCardReaderControl) PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4) PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4) PROP_ENTRY("AutoSize", DISPID_AUTOSIZE, CLSID_NULL) PROP_ENTRY("Enabled", DISPID_ENABLED, CLSID_NULL) // Example entries // PROP_ENTRY("Property Description", dispid, clsid) // PROP_PAGE(CLSID_StockColorPage) END_PROP_MAP() BEGIN_MSG_MAP(CCCardReaderControl) CHAIN_MSG_MAP(CComControl) DEFAULT_REFLECTION_HANDLER() END_MSG_MAP() // Handler prototypes: // LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); // LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); // LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled); TCHAR ReadedString[255]; HANDLE h_ReaderThread; DWORD dw_ReaderThreadID; HANDLE h_ShutDownThreadEvent; // ISupportsErrorInfo STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid) { static const IID* arr[] = { &IID_ICCardReaderControl, }; for (int i=0; iReadedString,_T("No code readed, thread started")); CSocketComm readerSock; readerSock.ConnectTo(_T("10.1.10.156"), _T("7531"), AF_INET, SOCK_STREAM); while(true){ BYTE buff[255]; if(readerSock.ReadComm(buff, 255, 100)) { char ch[2]={10,0}; buff[strcspn((char*)buff,ch)]=0; _tcscpy(obj->ReadedString,CA2W((char*)&buff[1])); obj->FireViewChange(); } if(WAIT_OBJECT_0==WaitForSingleObject(obj->h_ShutDownThreadEvent, 1000)) break; } return 0; } STDMETHOD(get_ReadedCode)(BSTR* pVal); STDMETHOD(put_ReadedCode)(BSTR newVal); }; OBJECT_ENTRY_AUTO(__uuidof(CCardReaderControl), CCCardReaderControl)