www.pudn.com > lucent_softphone.rar > KVPair.cpp


// KVPair.cpp : Implementation of CKVPair 
#include "stdafx.h" 
#include "LucentCti.h" 
 
///////////////////////////////////////////////////////////////////////////// 
// CKVPair 
#include "KVPair.h" 
#include "KVList.h" 
 
BSTR C2B(const char *c) 
{ 
	if(!c) return(NULL); 
	OLECHAR buf[256]; 
	ZeroMemory(buf, sizeof(OLECHAR)*256); 
	MultiByteToWideChar(CP_ACP, 0, c, -1, buf, 256); 
	return(SysAllocString(buf)); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CKVPair 
 
BOOL CKVPair::Initialize(TKVPair *pPair) 
{ 
	m_type = (KVTYPES)TKVListType(pPair); 
	m_key = TKVListKey(pPair); 
	m_length = TKVListBinaryLength(pPair); 
	switch(m_type) { 
	case KVT_String: 
		m_stringValue = TKVListStringValue(pPair); 
		break; 
	case KVT_Int: 
		m_intValue = TKVListIntValue(pPair); 
		break; 
	case KVT_List: 
		m_listValue = TKVListDup(TKVListListValue(pPair)); 
		if(!m_listValue) return(FALSE); 
		break; 
	case KVT_Binary: 
		m_binaryValue = new byte[m_length]; 
		if(!m_binaryValue) return(FALSE); 
		else memcpy(m_binaryValue, TKVListBinaryValue(pPair), m_length); 
		break; 
	case KVT_Incorrect: 
	default: 
		return(FALSE); 
	} 
	return(TRUE); 
} 
 
STDMETHODIMP CKVPair::get_Type(KVTYPES *pVal) 
{ 
	// TODO: Add your implementation code here 
	*pVal = m_type; 
	return S_OK; 
} 
 
STDMETHODIMP CKVPair::get_Key(BSTR *pVal) 
{ 
	// TODO: Add your implementation code here 
	*pVal = C2B(m_key.c_str()); 
	return S_OK; 
} 
 
STDMETHODIMP CKVPair::get_StringValue(BSTR *pVal) 
{ 
	// TODO: Add your implementation code here 
	*pVal = C2B(m_stringValue.c_str()); 
	return S_OK; 
} 
 
STDMETHODIMP CKVPair::get_IntValue(int *pVal) 
{ 
	// TODO: Add your implementation code here 
	*pVal = m_intValue; 
	return S_OK; 
} 
 
STDMETHODIMP CKVPair::get_ListValue(LPKVLIST *pVal) 
{ 
	// TODO: Add your implementation code here 
	*pVal = CreateKVList(m_listValue); 
	return S_OK; 
} 
 
STDMETHODIMP CKVPair::get_BinaryValue(byte **pVal) 
{ 
	// TODO: Add your implementation code here 
	*pVal = m_binaryValue; 
	return S_OK; 
} 
 
STDMETHODIMP CKVPair::get_BinaryLength(int *pVal) 
{ 
	// TODO: Add your implementation code here 
	*pVal = m_length; 
	return S_OK; 
}