SAFEARRAY 구조체(oaidl.h)

안전한 배열을 나타냅니다.

구문

typedef struct tagSAFEARRAY {
  USHORT         cDims;
  USHORT         fFeatures;
  ULONG          cbElements;
  ULONG          cLocks;
  PVOID          pvData;
  SAFEARRAYBOUND rgsabound[1];
} SAFEARRAY;

멤버

cDims

차원 수입니다.

fFeatures

플래그.

의미
FADF_AUTO
0x0001
스택에 할당된 배열입니다.
FADF_STATIC
0x0002
정적으로 할당된 배열입니다.
FADF_EMBEDDED
0x0004
구조체에 포함된 배열입니다.
FADF_FIXEDSIZE
0x0010
크기를 조정하거나 다시 할당할 수 없는 배열입니다.
FADF_RECORD
0x0020
레코드를 포함하는 배열입니다. 설정하면 배열 설명자의 음수 오프셋 4에 IRecordInfo 인터페이스에 대한 포인터가 있습니다.
FADF_HAVEIID
0x0040
IID 식별 인터페이스가 있는 배열입니다. 설정하면 안전 배열 설명자에 음수 오프셋 16의 GUID가 있습니다. 플래그는 FADF_DISPATCH 또는 FADF_UNKNOWN 설정된 경우에만 설정됩니다.
FADF_HAVEVARTYPE
0x0080
변형 형식이 있는 배열입니다. Variant 형식은 SafeArrayGetVartype을 사용하여 검색할 수 있습니다.
FADF_BSTR
0x0100
BSTR의 배열입니다.
FADF_UNKNOWN
0x0200
IUnknown*의 배열입니다.
FADF_DISPATCH
0x0400
IDispatch*의 배열입니다.
FADF_VARIANT
0x0800
VARIANT 배열입니다.
FADF_RESERVED
0xF008
나중에 사용하기 위해 예약된 비트입니다.

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 데이터 형식의 모든 공용 정적 멤버는 스레드로부터 안전합니다. 인스턴스 멤버는 스레드로부터의 안전성이 보장 되지 않습니다.

예를 들어 SafeArrayLockSafeArrayUnlock 함수를 사용하는 애플리케이션을 고려해 보세요. 이러한 함수가 instance 동일한 SAFEARRAY 데이터 형식의 다른 스레드에서 동시에 호출되는 경우 일관성 없는 잠금 수가 생성될 수 있습니다. 그러면 결국 SafeArrayUnlock 함수가 E_UNEXPECTED 반환됩니다. 사용자 고유의 동기화 코드를 제공하여 이를 방지할 수 있습니다.

요구 사항

요구 사항
헤더 oaidl.h