Safearrays SafeArrayCreate
या SafeArrayCreateVector
के साथ बनाए जाते हैं, लेकिन जैसा कि आप एक सुरक्षितता पर पुनरावृत्ति के बारे में पूछते हैं, मान लीजिए कि आपके पास पहले से ही किसी अन्य फ़ंक्शन द्वारा सुरक्षित सुरक्षा है। एक तरीका है SafeArrayGetElement
एपीआई का उपयोग करना जो विशेष रूप से सुविधाजनक है यदि आपके पास बहुआयामी सुरक्षा है, क्योंकि यह आईएमओ को इंडेक्स को निर्दिष्ट करने में थोड़ा आसान है।
हालांकि, वैक्टरों के लिए (अप्रत्याशित सुरक्षा) डेटा को सीधे एक्सेस करने और मूल्यों पर पुन: प्रयास करने के लिए तेज़ है। यहां एक उदाहरण दिया गया है:
मान लें कि यह long
एस का एक सुरक्षित है, यानी। VT_I4
// get them from somewhere. (I will assume that this is done
// in a way that you are now responsible to free the memory)
SAFEARRAY* saValues = ...
LONG* pVals;
HRESULT hr = SafeArrayAccessData(saValues, (void**)&pVals); // direct access to SA memory
if (SUCCEEDED(hr))
{
long lowerBound, upperBound; // get array bounds
SafeArrayGetLBound(saValues, 1 , &lowerBound);
SafeArrayGetUBound(saValues, 1, &upperBound);
long cnt_elements = upperBound - lowerBound + 1;
for (int i = 0; i < cnt_elements; ++i) // iterate through returned values
{
LONG lVal = pVals[i];
std::cout << "element " << i << ": value = " << lVal << std::endl;
}
SafeArrayUnaccessData(saValues);
}
SafeArrayDestroy(saValues);
स्रोत
2012-09-18 20:12:23
'cmd' क्या है? ! –