Files
Slnkdwf/SlnkDWFCom/WinSock.h
Jos Groot Lipman 1217f64b61 Betere error handling WinSock
svn path=/Slnkdwf/trunk/; revision=26210
2015-09-07 19:38:19 +00:00

85 lines
2.2 KiB
C++

// WinSock.h : Declaration of the CWinSock
#pragma once
#include "resource.h" // main symbols
#include <Ws2tcpip.h>
#pragma comment(lib,"ws2_32.lib") //Winsock Library
#include "SLNKDWF.h"
#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
#endif
using namespace ATL;
// CWinSock
class ATL_NO_VTABLE CWinSock :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CWinSock, &CLSID_WinSock>,
public ISupportErrorInfo,
public IDispatchImpl<IWinSock, &IID_IWinSock, &LIBID_SLNKDWFLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CWinSock();
~CWinSock();
DECLARE_REGISTRY_RESOURCEID(IDR_WINSOCK)
BEGIN_COM_MAP(CWinSock)
COM_INTERFACE_ENTRY(IWinSock)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
STDMETHOD(get_LocalHostIP)(BSTR* pVal);
STDMETHOD(put_LocalHostIP)(BSTR newVal);
STDMETHOD(get_RemoteHostIP)(BSTR* pVal);
STDMETHOD(put_RemoteHostIP)(BSTR newVal);
STDMETHOD(get_RemotePort)(ULONG* pVal);
STDMETHOD(put_RemotePort)(ULONG newVal);
STDMETHOD(OpenConnection)();
STDMETHOD(SendData)(BSTR sData, BYTE* bResult);
STDMETHOD(isDataAvailable)();
STDMETHOD(ReceiveData)(BSTR* sData);
STDMETHOD(ShutdownConnection)();
private:
SOCKET m_socket;
bool m_must_close;
CString m_LocalHostIP;
CString m_RemoteHostIP;
ULONG m_RemotePort;
ULONG m_Timeout;
public:
STDMETHOD(get_Timeout)(ULONG* pVal);
STDMETHOD(put_Timeout)(ULONG newVal);
};
OBJECT_ENTRY_AUTO(__uuidof(WinSock), CWinSock)