SAFEARRAY 구조체(oaidl.h)
안전한 배열을 나타냅니다.
구문
typedef struct tagSAFEARRAY {
USHORT cDims;
USHORT fFeatures;
ULONG cbElements;
ULONG cLocks;
PVOID pvData;
SAFEARRAYBOUND rgsabound[1];
} SAFEARRAY;
멤버
cDims
차원 수입니다.
fFeatures
플래그.
값 | 의미 |
---|---|
|
스택에 할당된 배열입니다. |
|
정적으로 할당된 배열입니다. |
|
구조체에 포함된 배열입니다. |
|
크기를 조정하거나 다시 할당할 수 없는 배열입니다. |
|
레코드를 포함하는 배열입니다. 설정하면 배열 설명자의 음수 오프셋 4에 IRecordInfo 인터페이스에 대한 포인터가 있습니다. |
|
IID 식별 인터페이스가 있는 배열입니다. 설정하면 안전 배열 설명자에 음수 오프셋 16의 GUID가 있습니다. 플래그는 FADF_DISPATCH 또는 FADF_UNKNOWN 설정된 경우에만 설정됩니다. |
|
변형 형식이 있는 배열입니다. Variant 형식은 SafeArrayGetVartype을 사용하여 검색할 수 있습니다. |
|
BSTR의 배열입니다. |
|
IUnknown*의 배열입니다. |
|
IDispatch*의 배열입니다. |
|
VARIANT 배열입니다. |
|
나중에 사용하기 위해 예약된 비트입니다. |
cbElements
배열 요소의 크기입니다.
cLocks
해당 잠금 해제 없이 배열이 잠긴 횟수입니다.
pvData
데이터입니다.
rgsabound[1]
각 차원에 대해 바인딩된 1개입니다.
설명
배열 rgsabound는 rgsabound [0]의 가장 왼쪽 차원과 에서 가장 오른쪽에 있는 차원으로 저장됩니다 rgsabound[cDims - 1]
. 배열이 C와 유사한 구문에서 [2][5]로 지정된 경우 rgsabound 벡터에 두 개의 요소가 있습니다. 요소 0의 lLbound 는 0이고 cElements는 2입니다 . 요소 1의 lLbound 는 0이고 cElements는 5입니다 .
fFeatures 플래그는 배열이 해제되는 방식에 영향을 줄 수 있는 배열의 특성을 설명합니다. fFeatures 필드는 SAFEARRAY에 저장되는 데이터 형식과 배열이 할당되는 방법을 설명합니다. 이렇게 하면 포함된 변형을 참조하지 않고 배열을 해제할 수 있습니다.
스레드 보안
SAFEARRAY 데이터 형식의 모든 공용 정적 멤버는 스레드로부터 안전합니다. 인스턴스 멤버는 스레드로부터의 안전성이 보장 되지 않습니다.
예를 들어 SafeArrayLock 및 SafeArrayUnlock 함수를 사용하는 애플리케이션을 고려해 보세요. 이러한 함수가 instance 동일한 SAFEARRAY 데이터 형식의 다른 스레드에서 동시에 호출되는 경우 일관성 없는 잠금 수가 생성될 수 있습니다. 그러면 결국 SafeArrayUnlock 함수가 E_UNEXPECTED 반환됩니다. 사용자 고유의 동기화 코드를 제공하여 이를 방지할 수 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
헤더 | oaidl.h |