⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gps.h

📁 使用com开发的一个GPRS组件
💻 H
字号:
// GPS.h : Declaration of the CGPS

#ifndef __GPS_H_
#define __GPS_H_

#include "resource.h"       // main symbols
#include <atlctl.h>
#include <comutil.h>
#include "..\\..\\..\\监测测向数据定义.h"
#include "CXGPSCP.h"

#import "..\\..\\..\\server\\MonitorDFServer\\Hzx.tlb" no_namespace named_guids

extern _ATL_FUNC_INFO OnGPSDataInfo;
extern _ATL_FUNC_INFO OnGPSErrorInfo;

/////////////////////////////////////////////////////////////////////////////
// CGPS
class ATL_NO_VTABLE CGPS : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public IDispatchImpl<IGPS, &IID_IGPS, &LIBID_CXGPSLib>,
	public IConnectionPointContainerImpl<CGPS>,
	public CComCoClass<CGPS, &CLSID_GPS>,
	public IDispEventImpl<0,CGPS,&DIID__ICX803Events,&LIBID_HZXLib>,
	public CProxy_IGPSEvents< CGPS >
{
public:
	CGPS()
	{
		m_bRun=FALSE;

		/*
		WORD	wVersionRequested=MAKEWORD( 2, 2 );
		WSADATA wsaData;
		int err = WSAStartup( wVersionRequested, &wsaData );
		hostent* phost=gethostbyname("");
		in_addr* pinaddr=(in_addr*)phost->h_addr;
		char* pszHostIP=inet_ntoa(*pinaddr);
		m_sckBroadCast=socket(AF_INET,SOCK_DGRAM,0);

		sockaddr_in soin;
		soin.sin_family		=AF_INET;
		soin.sin_addr.s_addr=INADDR_ANY;
		soin.sin_port		=htons(0);

		bind(m_sckBroadCast,(sockaddr *)&soin,sizeof(soin));
		BOOL l=1;
		setsockopt(m_sckBroadCast,SOL_SOCKET,SO_BROADCAST,(char FAR*)&l,sizeof(l));

		memset(&m_si,0,sizeof(m_si));
		m_si.sin_family		=AF_INET;
		m_si.sin_port		=htons(SOCKET_GPS);
		m_si.sin_addr.s_addr=INADDR_BROADCAST;

		*/

	}
	~CGPS()
	{
		if(m_pDevicePoint.GetInterfacePtr())
			DispEventUnadvise(m_pDevicePoint);

		m_bRun=FALSE;
		
		shutdown(m_sckBroadCast, SD_SEND|SD_RECEIVE);
		closesocket(m_sckBroadCast);
	}


	//设备事件接收器
	HRESULT _stdcall OnGPSData (long lLongitude, long lLatitude)	//1/10000度
	{


		Fire_DataReceive(lLongitude/10000.0, lLatitude/10000.0);

		/*

		sendto(m_sckBroadCast,szSend,strlen(szSend),0,(const SOCKADDR*)&(m_si),sizeof(m_si));

		*/

		return S_OK;
	}
	HRESULT _stdcall OnGPSError (BSTR bstrMsg)	
	{
		Fire_ErrorMsg(bstrMsg);

		return S_OK;
	}

DECLARE_REGISTRY_RESOURCEID(IDR_GPS)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CGPS)
	COM_INTERFACE_ENTRY(IGPS)
	COM_INTERFACE_ENTRY(IDispatch)
	COM_INTERFACE_ENTRY(IConnectionPointContainer)
	COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
END_COM_MAP()


BEGIN_CONNECTION_POINT_MAP(CGPS)
CONNECTION_POINT_ENTRY(DIID__IGPSEvents)
END_CONNECTION_POINT_MAP()

BEGIN_SINK_MAP(CGPS)
	//SINK_ENTRY_EX(0, DIID__ICX803Events, 2,  OnGPSData)
	//SINK_ENTRY_EX(0, DIID__ICX803Events, 5,  OnGPSError)
	SINK_ENTRY_INFO(0, DIID__ICX803Events, 2,  OnGPSData, &OnGPSDataInfo)
	SINK_ENTRY_INFO(0, DIID__ICX803Events, 5,  OnGPSError, &OnGPSErrorInfo)
END_SINK_MAP()

// IGPS
public:
	STDMETHOD(get_ServerClsid)(/*[out, retval]*/ GUID *pVal);
	STDMETHOD(get_Name)(/*[out, retval]*/ BSTR *pVal);
	STDMETHOD(get_clsid)(/*[out, retval]*/ GUID *pVal);
	STDMETHOD(ShowConfigDlg)();
	STDMETHOD(get_dfLat)(/*[out, retval]*/ double *pVal);
	STDMETHOD(get_dfLong)(/*[out, retval]*/ double *pVal);
	STDMETHOD(get_Run)(/*[out, retval]*/ BOOL *pVal);
	STDMETHOD(put_Run)(/*[in]*/ BOOL newVal);
	STDMETHOD(get_config)(/*[out, retval]*/ VARIANT *pVal);
	STDMETHOD(put_config)(/*[in]*/ VARIANT newVal);

	_variant_t		m_config;
	BOOL			m_bRun;
	sockaddr_in		m_si;					//广播Socket
	SOCKET			m_sckBroadCast;			//广播Socket

	ICX803Ptr			m_pDevicePoint;		//控制的川新设备

};

#endif //__GPS_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -