本文整理汇总了C++中COleSafeArray::Attach方法的典型用法代码示例。如果您正苦于以下问题:C++ COleSafeArray::Attach方法的具体用法?C++ COleSafeArray::Attach怎么用?C++ COleSafeArray::Attach使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类COleSafeArray
的用法示例。
在下文中一共展示了COleSafeArray::Attach方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Sort
void CMainFrame::Sort(VARIANT* vArray)
{
COleSafeArray sa;
BSTR *pbstr;
TCHAR buf[1024];
LONG cElements, lLBound, lUBound;
//needed for OLE2T macro below, include afxpriv.h
USES_CONVERSION;
// Type check VARIANT parameter. It should contain a BSTR array
// passed by reference. The array must be passed by reference it is
// an in-out-parameter.
if (V_VT(vArray) != (VT_ARRAY | VT_BSTR))
{
AfxThrowOleDispatchException(1001,
_T("Type Mismatch in Parameter. Pass a string array by reference"));
}
// clears data in sa and copies the variant data into sa
sa.Attach(*vArray);
// Check that array is 1 dimensional
if (sa.GetDim() != 1)
{
AfxThrowOleDispatchException(1002,
_T("Type Mismatch in Parameter. Pass a one-dimensional array"));
}
try
{
// Get array bounds.
sa.GetLBound(1, &lLBound);
sa.GetUBound(1, &lUBound);
// Get a pointer to the elements of the array
// and increments the lock count on the array
sa.AccessData((LPVOID*)&pbstr);
//get no. of elements in array
cElements = lUBound - lLBound + 1;
for (int i = 0; i < cElements; i++)
{
//output the elements of the array
_stprintf_s(buf, 1024, _T("[%s]\n"), OLE2T(pbstr[i]));
OutputDebugString(buf);
}
//decrement lock count
sa.UnaccessData();
}
catch (COleException *pEx)
{
AfxThrowOleDispatchException(1003,
_T("Unexpected Failure in FastSort method"));
pEx->Delete();
}
}
示例2: __declspec
void __declspec(dllexport) __stdcall FillLocalArray(SequenceContext *seqContext, short *errorOccurred, long *errorCode, char errorMsg[1024])
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
double * numArray = NULL;
unsigned int numElements;
double numCycles = 2.0;
PropertyObjectPtr seqContextPOPtr;
TRY
// Set sequence context as a property object
seqContextPOPtr = seqContext->AsPropertyObject();
// The following code shows how to accesses properties via the ActiveX Automation API
if (seqContextPOPtr->Exists("Locals.NumericArray",0))
{
// Create a Safe Array from the VARIANT which contains a
// copy of the Locals.NumericArray.
COleSafeArray safeArray;
safeArray.Attach(seqContextPOPtr->GetValVariant("Locals.NumericArray",0));
// Check the size of the array of data - assuming 1D array
numElements = safeArray.GetOneDimSize();
// Lock array for data access and get a pointer to the data.
// (assuming it's an array of doubles)
safeArray.AccessData((void**)&numArray);
// Create sine pattern
for (unsigned int i=0; i<numElements; i++)
numArray[i] = sin((2*3.14) * i *numCycles/ numElements);
// unlock array
safeArray.UnaccessData();
// Set the value of the property the lookupString parameter specifies with a variant.
// Use this method to set the value of an entire array at once.
seqContextPOPtr->SetValVariant("Locals.NumericArray", 0, safeArray);
}
CATCH(COleDispatchException, e)
*errorOccurred = TRUE;
_mbsnbcpy_s((unsigned char *)errorMsg, 1024, (unsigned char *)LPCTSTR(e->m_strDescription), 1024 - 1);
*(errorMsg + (1024 - 1)) = '\0';
*errorCode = e->m_scError;
AND_CATCH(CMemoryException, e)
*errorOccurred = TRUE;
e->GetErrorMessage(errorMsg, 1024);
*(errorMsg + (1024 - 1)) = '\0';
*errorCode = TS_Err_OutOfMemory;
END_CATCH
}
示例3: pre_load_sheet
void pre_load_sheet(CWorksheet &sheet, COleSafeArray &safe_array)
{
///当前的操作区域
CRange excel_current_range;
excel_current_range.AttachDispatch(sheet.get_Cells(), true);
CRange used_range = sheet.get_UsedRange();
VARIANT ret_ary = used_range.get_Value2();
if (!(ret_ary.vt & VT_ARRAY)){
return;
}
safe_array.Clear();
safe_array.Attach(ret_ary);
}