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::Destroy
를 CComSafeArray
만들고 삭제하는 데 사용합니다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
클래스 개요