|
|
#include "stdafx.h"
#include "Direct.h"
#include "dms.h"
#include "DPlayAddressObj.h"
extern void *g_dxj_DirectPlayAddress; extern BSTR GUIDtoBSTR(LPGUID); extern HRESULT DPLAYBSTRtoGUID(LPGUID,BSTR); extern BOOL IsEmptyString(BSTR szString);
#define SAFE_DELETE(p) { if(p) { delete (p); p=NULL; } }
#define SAFE_RELEASE(p) { __try { if(p) { int i = 0; i = (p)->Release(); DPF1(1,"--DirectPlayAddress SafeRelease (RefCount = %d)\n",i); if (!i) { (p)=NULL;}} } __except(EXCEPTION_EXECUTE_HANDLER) { (p) = NULL;} }
///////////////////////////////////////////////////////////////////
// InternalAddRef
///////////////////////////////////////////////////////////////////
DWORD C_dxj_DirectPlayAddressObject::InternalAddRef(){ DWORD i; i=CComObjectRoot::InternalAddRef(); DPF2(1,"------ DXVB: DirectPlayAddress8 [%d] AddRef %d \n",creationid,i); return i; }
///////////////////////////////////////////////////////////////////
// InternalRelease
///////////////////////////////////////////////////////////////////
DWORD C_dxj_DirectPlayAddressObject::InternalRelease(){ DWORD i; i=CComObjectRoot::InternalRelease(); DPF2(1,"------ DXVB: DirectPlayAddress8 [%d] Release %d \n",creationid,i); return i; }
///////////////////////////////////////////////////////////////////
// C_dxj_DirectPlayAddressObject
///////////////////////////////////////////////////////////////////
C_dxj_DirectPlayAddressObject::C_dxj_DirectPlayAddressObject(){ DPF1(1,"------ DXVB: Constructor Creation DirectPlayAddress8 Object[%d] \n ",g_creationcount);
m__dxj_DirectPlayAddress = NULL;
m_pUserData = NULL; m_dwUserDataSize = 0; g_dxj_DirectPlayAddress = (void *)this; }
///////////////////////////////////////////////////////////////////
// ~C_dxj_DirectPlayAddressObject
///////////////////////////////////////////////////////////////////
C_dxj_DirectPlayAddressObject::~C_dxj_DirectPlayAddressObject() {
DPF(1,"Entering ~C_dxj_DirectPlayAddressObject destructor \n");
__try { SAFE_RELEASE(m__dxj_DirectPlayAddress); } __except(EXCEPTION_EXECUTE_HANDLER) { m__dxj_DirectPlayAddress = NULL; }
SAFE_DELETE(m_pUserData); }
HRESULT C_dxj_DirectPlayAddressObject::InternalGetObject(IUnknown **pUnk){ *pUnk=(IUnknown*)m__dxj_DirectPlayAddress; return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::InternalSetObject(IUnknown *pUnk){ m__dxj_DirectPlayAddress=(IDirectPlay8Address*)pUnk; return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::BuildFromURL(BSTR SourceURL) { HRESULT hr;
__try { if (FAILED(hr = m__dxj_DirectPlayAddress->BuildFromURLW(SourceURL) ) ) return hr; } __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; }
return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::Duplicate(I_dxj_DirectPlayAddress **NewAddress) { HRESULT hr; IDirectPlay8Address *lpDup = NULL;
__try { if (FAILED (hr = m__dxj_DirectPlayAddress->Duplicate(&lpDup) ) ) return hr;
INTERNAL_CREATE_ADDRESS(_dxj_DirectPlayAddress, lpDup, NewAddress); } __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; }
return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::Clear() { HRESULT hr;
__try { if (FAILED ( hr = m__dxj_DirectPlayAddress->Clear() ) ) return hr;
} __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; } return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::GetURL(BSTR *URL) { HRESULT hr; WCHAR wszUrl[MAX_PATH]; DWORD dwNumChars = 0; __try { hr = m__dxj_DirectPlayAddress->GetURLW(NULL, &dwNumChars); if( FAILED(hr) && hr != DPNERR_BUFFERTOOSMALL) return hr;
if (FAILED (hr = m__dxj_DirectPlayAddress->GetURLW(&wszUrl[0],&dwNumChars) ) ) return hr;
*URL = SysAllocString(&wszUrl[0]);
} __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; } return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::GetSP(BSTR *guidSP) { HRESULT hr; GUID guidDev; __try { if (FAILED (hr = m__dxj_DirectPlayAddress->GetSP(&guidDev ) ) ) return hr;
GUID* pGuid = new GUID; if (!pGuid) return E_OUTOFMEMORY;
memcpy( pGuid, &guidDev, sizeof(GUID) ); *guidSP = GUIDtoBSTR(pGuid); SAFE_DELETE(pGuid);
} __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; } return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::GetUserData(void *UserData, long *lBufferSize) { __try { DPF(1,"-----Entering (DplayAddress) GetUserData call...\n"); //Copy the memory over to our new variable
memcpy(UserData,m_pUserData,m_dwUserDataSize); lBufferSize = (long*)&m_dwUserDataSize; } __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; } return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::SetSP(BSTR guidSP) { HRESULT hr; GUID guidDev;
__try { if (guidSP) { if (FAILED( hr = DPLAYBSTRtoGUID(&guidDev, guidSP) ) ) return hr; } else return E_INVALIDARG;
if (FAILED ( hr = m__dxj_DirectPlayAddress->SetSP(&guidDev) )) return hr; } __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; }
return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::SetUserData(void *UserData, long lDataSize) { __try { DPF(1,"-----Entering (DplayAddress) SetUserData call...\n"); if (m_pUserData) SAFE_DELETE(m_pUserData);
m_pUserData = (void*)new BYTE[lDataSize]; if (!m_pUserData) return E_OUTOFMEMORY;
memcpy((void*) m_pUserData, (void*)UserData, lDataSize); m_dwUserDataSize = (DWORD)lDataSize; } __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; } return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::GetNumComponents(long *lNumComponents) { HRESULT hr;
__try { if (FAILED (hr = m__dxj_DirectPlayAddress->GetNumComponents((DWORD*) lNumComponents) ) ) return hr; } __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; }
return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::GetDevice(BSTR *guidDevice) { HRESULT hr; GUID guidDev; __try { if (FAILED (hr = m__dxj_DirectPlayAddress->GetDevice(&guidDev ) ) ) return hr;
GUID* pGuid = new GUID; if (!pGuid) return E_OUTOFMEMORY;
memcpy( pGuid, &guidDev, sizeof(GUID) ); *guidDevice = GUIDtoBSTR(pGuid); SAFE_DELETE(pGuid); } __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; }
return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::SetDevice(BSTR guidDevice) { HRESULT hr; GUID guidDev;
__try { if (guidDevice) { if (FAILED( hr = DPLAYBSTRtoGUID(&guidDev, guidDevice) ) ) return hr; } else return E_INVALIDARG;
if (FAILED ( hr = m__dxj_DirectPlayAddress->SetDevice(&guidDev) )) return hr;
} __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; } return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::SetEqual(I_dxj_DirectPlayAddress *Address) { HRESULT hr;
__try { DO_GETOBJECT_NOTNULL( IDirectPlay8Address*, lpAddress, Address);
if (FAILED (hr = m__dxj_DirectPlayAddress->SetEqual( lpAddress) )) return hr;
} __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; } return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::AddComponentLong(BSTR sComponent, long lValue) { HRESULT hr; WCHAR wszComponent[MAX_PATH];
__try { if (!IsEmptyString(sComponent)) wcscpy(wszComponent, sComponent);
if (FAILED (hr = m__dxj_DirectPlayAddress->AddComponent(wszComponent, (DWORD*) &lValue, sizeof(DWORD), DPNA_DATATYPE_DWORD ) ) ) return hr;
} __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; } return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::AddComponentString(BSTR sComponent, BSTR sValue) { HRESULT hr; WCHAR wszComponent[MAX_PATH]; WCHAR wszValue[MAX_PATH];
__try { if (!IsEmptyString(sComponent)) wcscpy(wszComponent, sComponent); if (!IsEmptyString(sValue)) wcscpy(wszValue, sValue);
if (FAILED (hr = m__dxj_DirectPlayAddress->AddComponent(wszComponent, (WCHAR*) &wszValue, (((DWORD*)sValue)[-1]) + sizeof(WCHAR), DPNA_DATATYPE_STRING ) ) ) return hr;
} __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; } return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::GetComponentLong(BSTR sComponent, long *lValue) { HRESULT hr; WCHAR wszComponent[MAX_PATH]; DWORD dwSize = 0; DWORD dwDataType = DPNA_DATATYPE_DWORD; DWORD dwData = 0; __try { if (!IsEmptyString(sComponent)) { wcscpy(wszComponent, sComponent); } else return E_INVALIDARG;
hr = m__dxj_DirectPlayAddress->GetComponentByName(wszComponent, NULL, &dwSize, &dwDataType); if (FAILED(hr) && (hr != DPNERR_BUFFERTOOSMALL)) return hr;
if (FAILED (hr = m__dxj_DirectPlayAddress->GetComponentByName(wszComponent, &dwData, &dwSize, &dwDataType) ) ) return hr;
*lValue = dwData;
} __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; } return S_OK; }
HRESULT C_dxj_DirectPlayAddressObject::GetComponentString(BSTR sComponent, BSTR *sValue) { HRESULT hr; WCHAR wszComponent[MAX_PATH]; DWORD dwSize = 0; DWORD dwDataType = DPNA_DATATYPE_STRING; WCHAR *wszRet = NULL; __try { if (!IsEmptyString(sComponent)) { wcscpy(wszComponent, sComponent); } else return E_INVALIDARG;
hr = m__dxj_DirectPlayAddress->GetComponentByName(wszComponent, NULL, &dwSize, &dwDataType); if (FAILED(hr) && (hr != DPNERR_BUFFERTOOSMALL)) return hr;
wszRet = (WCHAR*)new BYTE[dwSize]; if (!wszRet) return E_OUTOFMEMORY;
hr = m__dxj_DirectPlayAddress->GetComponentByName(wszComponent, wszRet, &dwSize, &dwDataType); if (FAILED(hr)) return hr;
*sValue = SysAllocString(wszRet); SAFE_DELETE(wszRet);
} __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; } return S_OK; }
|