2012-11-07 5 views
1

std :: vector를 CComSafeArray로 변환하는 빠른 방법이 있습니까? 현재 CComSafeArray (반복되지 않음) 5 또는 6 벡터 변환 기본적으로 코드 조각을 쓰고 있어요. 코드의 큰 블록 (오래된 공간을 해제하고 새로운 safearray를 생성, 복사)이 등장합니다. 정말 쉽게 변환 할 수 있기를 바랍니다.std :: vector를 CComSafeArray로 변환하는 빠른 방법

이 변환을 수행하는 방법을 쓸 수 있으므로 실제로 라이브러리 등의 모서리에있는 유용한 함수를 찾고 있습니다. 도움을 주셔서 대단히 감사합니다!

+0

그럼 스택 오버플로를 물어보십시오. 빨리. –

+0

벡터 <>에 대한 유형이 있습니까, 아니면 일반적인 솔루션을 찾고 있습니까 (이 시점에서 나는 어느 정도 확신하지 못합니다)? 나는. 이 벡터에 원하는 , 벡터 등? – WhozCraig

답변

3

간단한 유형 또는 포인터라고 가정 할 때 벡터의 내용을 기본 SAFEARRAY로 직접 복사해야합니다.

vector<T> vecInput; 

// Create a SAFEARRAY of size elements 
CComSafeArray<T> sa(vecInput.size()); 

// Copy all the contents into the SAFEARRAY 
for (size_t i = 0; i < vecInput.size(); ++i) 
    sa.SetAt(i, vecInput[i]); 

당신은 STL 알고리즘을 사용하려면, 그 후에 당신이 CComSafeArray::Attach이 호출 할 수 있습니다 적어도 one solution that provides STL compliant iterators on top of a SAFEARRAY 것 :

vector<T> vecInput; 

// Create a SAFEARRAY of size elements 
CComSafeArray<T> sa(vecInput.size()); 

// Copy all the contents into the SAFEARRAY 
memcpy(&sa.GetSafeArrayPtr()->pvData[0], &vecInput[0], sizeof(T) * vecInput.size()); 

당신은 벡터도 작동 반복, 일반화 된 솔루션을 찾고 있다면 SAFEARRAY를 CComSafeArray에 할당하십시오.

관련 문제