// Clone HRESULT COpcEnumString::Clone(IEnumString** ppEnum) { // check for invalid arguments. if (ppEnum == NULL) { return E_INVALIDARG; } // allocate enumerator. COpcEnumString* pEnum = new COpcEnumString(); // copy strings. pEnum->m_pStrings = OpcArrayAlloc(LPWSTR, m_uCount); for (UINT ii = 0; ii < m_uCount; ii++) { pEnum->m_pStrings[ii] = OpcArrayAlloc(WCHAR, wcslen(m_pStrings[ii])+1); wcscpy(pEnum->m_pStrings[ii], m_pStrings[ii]); } // set index. pEnum->m_uIndex = m_uIndex; pEnum->m_uCount = m_uCount; HRESULT hResult = pEnum->QueryInterface(IID_IEnumString, (void**)ppEnum); // release local reference. pEnum->Release(); return hResult; }
// CopyData void COpcText::CopyData(LPCWSTR szData, UINT uLength) { m_cData.Empty(); if (uLength > 0 && szData != NULL) { LPWSTR wszData = OpcArrayAlloc(WCHAR, uLength+1); wcsncpy(wszData, szData, uLength); wszData[uLength] = L'\0'; m_cData = wszData; OpcFree(wszData); } }
WCHAR* OpcStrDup(LPCWSTR szValue) { WCHAR* pCopy = NULL; if (szValue != NULL) { pCopy = OpcArrayAlloc(WCHAR, wcslen(szValue)+1); if (pCopy == NULL) { return NULL; } wcscpy(pCopy, szValue); } return pCopy; }
CHAR* OpcStrDup(LPCSTR szValue) { CHAR* pCopy = NULL; if (szValue != NULL) { pCopy = OpcArrayAlloc(CHAR, strlen(szValue)+1); if (pCopy == NULL) { return NULL; } strcpy(pCopy, szValue); } return pCopy; }