다음을 통해 공유


CComSafeArray 수업

이 클래스는 구조체에 대한 래퍼입니다 SAFEARRAY .

구문

template <typename T, VARTYPE _vartype = _ATL_AutomationType<T>::type>
class CComSafeArray

매개 변수

T
배열에 저장할 데이터의 형식입니다.

멤버

공용 생성자

속성 설명
CComSafeArray::CComSafeArray 생성자입니다.
CComSafeArray::~CComSafeArray 소멸자입니다.

공용 메서드

이름 설명
CComSafeArray::Add 하나 이상의 요소 또는 SAFEARRAY 구조체를 CComSafeArray에 추가합니다.
CComSafeArray::Attach 개체에 SAFEARRAY 구조를 CComSafeArray 연결합니다.
CComSafeArray::CopyFrom 구조체의 SAFEARRAY 내용을 개체에 CComSafeArray 복사합니다.
CComSafeArray::CopyTo CComSafeArray 개체의 복사본을 만듭니다.
CComSafeArray::Create CComSafeArray 개체를 만듭니다.
CComSafeArray::Destroy CComSafeArray 개체를 제거합니다.
CComSafeArray::Detach 개체에서 CComSafeArray 분리합니다SAFEARRAY.
CComSafeArray::GetAt 1차원 배열에서 단일 요소를 검색합니다.
CComSafeArray::GetCount 배열의 요소 수를 반환합니다.
CComSafeArray::GetDimensions 배열의 차원 수를 반환합니다.
CComSafeArray::GetLowerBound 배열의 지정된 차원에 대한 하한을 반환합니다.
CComSafeArray::GetSafeArrayPtr m_psa 데이터 멤버의 주소를 반환합니다.
CComSafeArray::GetType 배열에 저장된 데이터의 형식을 반환합니다.
CComSafeArray::GetUpperBound 배열의 모든 차원에 대한 상한을 반환합니다.
CComSafeArray::IsSizable CComSafeArray 개체의 크기를 조정할 수 있는지 테스트합니다.
CComSafeArray::MultiDimGetAt 다차원 배열에서 단일 요소를 검색합니다.
CComSafeArray::MultiDimSetAt 다차원 배열의 요소 값을 설정합니다.
CComSafeArray::Resize CComSafeArray 개체의 크기를 조정합니다.
CComSafeArray::SetAt 1차원 배열의 요소 값을 설정합니다.

Public 연산자

속성 설명
CComSafeArray::operator LPSAFEARRAY 값을 포인터로 캐스팅 SAFEARRAY 합니다.
CComSafeArray::operator[] 배열에서 요소를 검색합니다.
CComSafeArray::operator = 대입 연산자입니다.

공용 데이터 멤버

속성 설명
CComSafeArray::m_psa 이 데이터 멤버는 구조체의 주소를 보유합니다 SAFEARRAY .

설명

CComSafeArray는 데이터 형식 클래스에 대한 SAFEARRAY 래퍼를 제공하여 지원되는 VARIANT 거의 모든 형식의 단일 및 다차원 배열을 만들고 관리하는 간단한 문제입니다.

CComSafeArray 는 프로세스 간의 배열 전달을 간소화할 뿐만 아니라 상한과 하한에 대해 배열 인덱스 값을 확인하여 추가 보안을 제공합니다.

CComSafeArray 의 하한은 모든 사용자 정의 값에서 시작할 수 있지만 C++를 통해 액세스하는 배열에서는 0을 하한으로 사용해야 합니다. Visual Basic과 같은 다른 언어에서는 다른 경계 값(예: -10~10)을 사용할 수 있습니다.

개체 CComSafeArray::DestroyCComSafeArray 만들고 삭제하는 데 사용합니다CComSafeArray::Create.

A CComSafeArray 에는 다음과 같은 데이터 형식 하위 집합이 VARIANT 포함될 수 있습니다.

VARTYPE 설명
VT_I1 char
VT_I2 short
VT_I4 int
VT_I4 long
VT_I8 longlong
VT_UI1 byte
VT_UI2 ushort
VT_UI4 uint
VT_UI4 ulong
VT_UI8 ulonglong
VT_R4 float
VT_R8 double
VT_DECIMAL decimal pointer
VT_VARIANT variant pointer
VT_CY Currency 데이터 형식

요구 사항

머리글: atlsafe.h

예시

// Create a multidimensional array, 
// then write and read elements

// Define an array of character pointers
CComSafeArray<char> *pSar;

char cElement;
char cTable[2][3] = {'A','B','C','D','E','F'};

// Declare the variable used to store the
// array indexes
LONG aIndex[2];

// Define the array bound structure
CComSafeArrayBound bound[2];
bound[0].SetCount(2);
bound[0].SetLowerBound(0);
bound[1].SetCount(3);
bound[1].SetLowerBound(0);   

// Create a new 2 dimensional array
// each dimension size is 3
pSar = new CComSafeArray<char>(bound,2); 

// Use MultiDimSetAt to store characters in the array
for (int x = 0; x < 2; x++)
{
   for (int y = 0; y < 3; y++)
   {
      aIndex[0] = x;
      aIndex[1] = y;
      HRESULT hr = pSar->MultiDimSetAt(aIndex,cTable[x][y]);
      ATLASSERT(hr == S_OK);
   }
}
// Use MultiDimGetAt to retrieve characters in the array
for (int x = 0; x < 2; x++)
{
   for (int y = 0; y < 3; y++)
   {
      aIndex[0]=x;
      aIndex[1]=y;
      HRESULT hr = pSar->MultiDimGetAt(aIndex,cElement);
      ATLASSERT(hr == S_OK);
      ATLASSERT(cElement == cTable[x][y]);
   }   
}

CComSafeArray::Add

하나 이상의 요소 또는 SAFEARRAY 구조체를 CComSafeArray에 추가합니다.

HRESULT Add(const SAFEARRAY* psaSrc);
HRESULT Add(ULONG ulCount, const T* pT, BOOL bCopy = TRUE);
HRESULT Add(const T& t, BOOL bCopy = TRUE);

매개 변수

psaSrc
SAFEARRAY 개체에 대한 포인터입니다.

ulCount
배열에 추가할 개체의 수입니다.

pT
배열에 추가할 하나 이상의 개체에 대한 포인터입니다.

t
배열에 추가할 개체에 대한 참조입니다.

bCopy
데이터 복사본을 만들어야 하는지 여부를 나타냅니다. 기본값은 TRUE입니다.

반환 값

성공 또는 오류 오류를 HRESULT 반환 S_OK 합니다.

설명

새 개체는 기존 SAFEARRAY 개체의 끝에 추가됩니다. 다차원 개체에 개체를 SAFEARRAY 추가하는 것은 지원되지 않습니다. 개체의 기존 배열을 추가할 때 두 배열 모두 동일한 형식의 요소를 포함해야 합니다.

플래그는 bCopy 형식 BSTR VARIANT 의 요소가 배열에 추가되거나 추가되는 경우 고려됩니다. 기본값 TRUE 은 요소가 배열에 추가되면 새 복사본이 데이터로 만들어지도록 합니다.

CComSafeArray::Attach

개체에 SAFEARRAY 구조를 CComSafeArray 연결합니다.

HRESULT Attach(const SAFEARRAY* psaSrc);

매개 변수

psaSrc
구조체에 대한 포인터입니다 SAFEARRAY .

반환 값

성공 또는 오류 오류를 HRESULT 반환 S_OK 합니다.

설명

개체에 SAFEARRAY 구조를 연결하여 CComSafeArray 기존 CComSafeArray 메서드를 사용할 수 있도록 합니다.

CComSafeArray::CComSafeArray

생성자입니다.

CComSafeArray();
CComSafeArray(const SAFEARRAYBOUND& bound);
CComSafeArray(ULONG  ulCount, LONG lLBound = 0);
CComSafeArray(const SAFEARRAYBOUND* pBound, UINT uDims = 1);
CComSafeArray(const CComSafeArray& saSrc);
CComSafeArray(const SAFEARRAY& saSrc);
CComSafeArray(const SAFEARRAY* psaSrc);

매개 변수

bound
구조체입니다 SAFEARRAYBOUND .

ulCount
배열의 요소 수입니다.

lLBound
하한 값입니다. 즉, 배열에서 첫 번째 요소의 인덱스입니다.

pBound
구조체에 대한 포인터입니다 SAFEARRAYBOUND .

uDims
배열의 차원 수입니다.

saSrc
구조체 또는 CComSafeArray 개체에 대한 참조입니다SAFEARRAY. 두 경우 모두 생성자는 이 참조를 사용하여 배열의 복사본을 만들므로 생성 후 배열이 참조되지 않습니다.

psaSrc
구조체에 대한 포인터입니다 SAFEARRAY . 생성자는 이 주소를 사용하여 배열의 복사본을 만들므로 생성 후에는 배열을 참조하지 않습니다.

설명

CComSafeArray 개체를 만듭니다.

CComSafeArray::~CComSafeArray

소멸자입니다.

~CComSafeArray() throw()

설명

할당된 모든 리소스를 해제합니다.

CComSafeArray::CopyFrom

구조체의 SAFEARRAY 내용을 개체에 CComSafeArray 복사합니다.

HRESULT CopyFrom(LPSAFEARRAY* ppArray);

매개 변수

ppArray
복사할 대상에 대한 SAFEARRAY 포인터입니다.

반환 값

성공 또는 오류 오류를 HRESULT 반환 S_OK 합니다.

설명

이 메서드는 현재 CComSafeArray 개체에 내용을 SAFEARRAY 복사합니다. 배열의 기존 내용이 바뀝니다.

CComSafeArray::CopyTo

CComSafeArray 개체의 복사본을 만듭니다.

HRESULT CopyTo(LPSAFEARRAY* ppArray);

매개 변수

ppArray
SAFEARRAY위치를 만들 위치에 대한 포인터입니다.

반환 값

성공 또는 오류 오류를 HRESULT 반환 S_OK 합니다.

설명

이 메서드는 개체의 CComSafeArray 내용을 구조체로 SAFEARRAY 복사합니다.

CComSafeArray::Create

CComSafeArray을 만듭니다.

HRESULT Create(const SAFEARRAYBOUND* pBound, UINT uDims = 1);
HRESULT Create(ULONG ulCount = 0, LONG lLBound = 0);

매개 변수

pBound
SAFEARRAYBOUND 개체에 대한 포인터입니다.

uDims
배열의 차원 수입니다.

ulCount
배열의 요소 수입니다.

lLBound
하한 값입니다. 즉, 배열에서 첫 번째 요소의 인덱스입니다.

반환 값

성공 또는 오류 오류를 HRESULT 반환 S_OK 합니다.

설명

개체는 CComSafeArray 기존 SAFEARRAYBOUND 구조체와 차원 수에서 만들거나 배열의 요소 수와 하한을 지정하여 만들 수 있습니다. C++에서 배열에 액세스하는 경우 하한은 0이어야 합니다. 다른 언어는 하한에 대한 다른 값을 허용할 수 있습니다(예: Visual Basic은 -10에서 10까지의 범위가 있는 요소가 있는 배열을 지원합니다).

CComSafeArray::Destroy

CComSafeArray 개체를 제거합니다.

HRESULT Destroy();

반환 값

성공 또는 오류 오류를 HRESULT 반환 S_OK 합니다.

설명

기존 CComSafeArray 개체와 해당 개체에 포함된 모든 데이터를 삭제합니다.

CComSafeArray::Detach

개체에서 CComSafeArray 분리합니다SAFEARRAY.

LPSAFEARRAY Detach();

반환 값

개체에 대한 포인터를 SAFEARRAY 반환합니다.

설명

이 메서드는 개체에서 SAFEARRAY 개체를 분리합니다 CComSafeArray .

CComSafeArray::GetAt

1차원 배열에서 단일 요소를 검색합니다.

T& GetAt(LONG lIndex) const;

매개 변수

lIndex
반환할 배열 값의 인덱스 번호입니다.

반환 값

필요한 배열 요소에 대한 참조를 반환합니다.

CComSafeArray::GetCount

배열의 요소 수를 반환합니다.

ULONG GetCount(UINT uDim = 0) const;

매개 변수

uDim
배열 차원입니다.

반환 값

배열의 요소 수를 반환합니다.

설명

다차원 배열과 함께 사용하는 경우 이 메서드는 특정 차원의 요소 수만 반환합니다.

CComSafeArray::GetDimensions

배열의 차원 수를 반환합니다.

UINT GetDimensions() const;

반환 값

배열의 차원 수를 반환합니다.

CComSafeArray::GetLowerBound

배열의 지정된 차원에 대한 하한을 반환합니다.

LONG GetLowerBound(UINT uDim = 0) const;

매개 변수

uDim
하한을 가져올 배열 차원입니다. 생략하면 기본값은 0입니다.

반환 값

하한을 반환합니다.

설명

하한이 0이면 첫 번째 요소가 요소 번호 0인 C와 유사한 배열을 나타냅니다. 오류가 발생한 경우(예: 잘못된 차원 인수) 이 메서드 AtlThrow 는 오류를 설명하는 호출을 HRESULT 사용합니다.

CComSafeArray::GetSafeArrayPtr

m_psa 데이터 멤버의 주소를 반환합니다.

LPSAFEARRAY* GetSafeArrayPtr() throw();

반환 값

데이터 멤버에 대한 포인터를 반환합니다 CComSafeArray::m_psa .

CComSafeArray::GetType

배열에 저장된 데이터의 형식을 반환합니다.

VARTYPE GetType() const;

반환 값

배열에 저장된 데이터 형식을 반환합니다. 이 형식은 다음 형식 중 어느 형식일 수도 있습니다.

VARTYPE 설명
VT_I1 char
VT_I2 short
VT_I4 int
VT_I4 long
VT_I8 longlong
VT_UI1 byte
VT_UI2 ushort
VT_UI4 uint
VT_UI4 ulong
VT_UI8 ulonglong
VT_R4 float
VT_R8 double
VT_DECIMAL decimal pointer
VT_VARIANT variant pointer
VT_CY Currency 데이터 형식

CComSafeArray::GetUpperBound

배열의 모든 차원에 대한 상한을 반환합니다.

LONG GetUpperBound(UINT uDim = 0) const;

매개 변수

uDim
상한을 가져올 배열 차원입니다. 생략하면 기본값은 0입니다.

반환 값

상한을 반환합니다. 이 값은 이 차원의 최대 유효한 인덱스인 포괄입니다.

설명

오류가 발생한 경우(예: 잘못된 차원 인수) 이 메서드 AtlThrow 는 오류를 설명하는 호출을 HRESULT 사용합니다.

CComSafeArray::IsSizable

CComSafeArray 개체의 크기를 조정할 수 있는지 테스트합니다.

bool IsSizable() const;

반환 값

CComSafeArray 크기를 FALSE 조정할 수 없는 경우 반환 TRUE 합니다.

CComSafeArray::m_psa

액세스한 구조체의 SAFEARRAY 주소를 보유합니다.

LPSAFEARRAY m_psa;

CComSafeArray::MultiDimGetAt

다차원 배열에서 단일 요소를 검색합니다.

HRESULT MultiDimGetAt(const LONG* alIndex, T& t);

매개 변수

alIndex
배열의 각 차원에 대한 인덱스의 벡터에 대한 포인터입니다. 가장 왼쪽(가장 중요한) 차원은 .입니다 alIndex[0].

t
반환된 데이터에 대한 참조입니다.

반환 값

성공 또는 오류 오류를 HRESULT 반환 S_OK 합니다.

CComSafeArray::MultiDimSetAt

다차원 배열의 요소 값을 설정합니다.

HRESULT MultiDimSetAt(const LONG* alIndex, const T& t);

매개 변수

alIndex
배열의 각 차원에 대한 인덱스의 벡터에 대한 포인터입니다. 가장 오른쪽(가장 중요하지 않은) 차원은 .입니다 alIndex[0].

T
새 요소의 값을 지정합니다.

반환 값

성공 또는 오류 오류를 HRESULT 반환 S_OK 합니다.

설명

다차원 버전의 CComSafeArray::SetAt.

CComSafeArray::operator []

배열에서 요소를 검색합니다.

T& operator[](long lindex) const;
T& operator[]int nindex) const;

매개 변수

lIndex, nIndex
배열에 필요한 요소의 인덱스 번호입니다.

반환 값

적절한 배열 요소를 반환합니다.

설명

유사한 함수를 CComSafeArray::GetAt수행합니다. 그러나 이 연산자는 1차원 배열에서만 작동합니다.

CComSafeArray::operator =

대입 연산자입니다.

ATL::CComSafeArray<T>& operator=(const ATL::CComSafeArray& saSrc);
ATL::CComSafeArray<T>& operator=(const SAFEARRAY* psaSrc);

매개 변수

saSrc
CComSafeArray 개체에 대한 참조입니다.

psaSrc
SAFEARRAY 개체에 대한 포인터입니다.

반환 값

배열에 저장된 데이터의 형식을 반환합니다.

CComSafeArray::operator LPSAFEARRAY

값을 포인터로 캐스팅 SAFEARRAY 합니다.

operator LPSAFEARRAY() const;

반환 값

값을 포인터로 캐스팅 SAFEARRAY 합니다.

CComSafeArray::Resize

CComSafeArray 개체의 크기를 조정합니다.

HRESULT Resize(const SAFEARRAYBOUND* pBound);
HRESULT Resize(ULONG ulCount, LONG lLBound = 0);

매개 변수

pBound
요소 수 및 배열의 하한에 대한 정보를 포함하는 구조체에 대한 포인터 SAFEARRAYBOUND 입니다.

ulCount
크기 조정된 배열에서 요청된 개체 수입니다.

lLBound
하한입니다.

반환 값

성공 또는 오류 오류를 HRESULT 반환 S_OK 합니다.

설명

이 메서드는 가장 오른쪽 차원의 크기만 조정합니다. 로 반환 IsResizable FALSE되는 배열의 크기는 조정되지 않습니다.

CComSafeArray::SetAt

1차원 배열의 요소 값을 설정합니다.

HRESULT SetAt(LONG lIndex, const T& t, BOOL bCopy = TRUE);

매개 변수

lIndex
설정할 배열 요소의 인덱스 번호입니다.

t
지정된 요소의 새 값입니다.

bCopy
데이터 복사본을 만들어야 하는지 여부를 나타냅니다. 기본값은 TRUE입니다.

반환 값

성공 또는 오류 오류를 HRESULT 반환 S_OK 합니다.

설명

플래그는 bCopy 형식 BSTR VARIANT 의 요소가 배열에 추가되거나 추가되는 경우 고려됩니다. 기본값 TRUE 은 요소가 배열에 추가되면 새 복사본이 데이터로 만들어지도록 합니다.

참고 항목

SAFEARRAY 데이터 형식
CComSafeArray::Create
CComSafeArray::Destroy
클래스 개요