阅读:1464回复:0
C++ Example of a SafeArray Datasetvoid CMapXView::OnSafeArray() { CMapXFields flds; CMapXDataset ds; COleVariant fldsVt; COptionalVariant optVt; COleSafeArray theData; // Create a 3x2 SafeArray unsigned long dims[2] = {3, 2}; theData.Create(VT_VARIANT, 2, dims); // Fill the SafeArray with data long indx[2] = {0,0}; theData.PutElement(indx, COleVariant("ME")); indx[0]=1;indx[1]=0; theData.PutElement(indx, COleVariant("NH")); indx[0]=2;indx[1]=0; theData.PutElement(indx, COleVariant("VT")); indx[0]=0;indx[1]=1; theData.PutElement(indx, COleVariant(100l)); indx[0]=1;indx[1]=1; theData.PutElement(indx, COleVariant(200l)); indx[0]=2;indx[1]=1; theData.PutElement(indx, COleVariant(300l)); try { // Create a new fields object flds.CreateDispatch(flds.GetClsid()); // Describe the structure of the SafeArray, so that our // columns will have names after the Datasets.Add flds.Add(COleVariant(1l), COleVariant("State"), COleVariant((long)miAggregationIndividual), COleVariant((long)miTypeString)); flds.Add(COleVariant(2l), COleVariant("Sales"), COleVariant((long)miAggregationSum), COleVariant((long)miTypeNumeric)); // point fldsVt at our fields object fldsVt.vt = VT_DISPATCH; fldsVt.pdispVal = flds.m_lpDispatch; fldsVt.pdispVal->AddRef(); // Create a SafeArray dataset ds = m_ctrlMapX.GetDatasets().Add(miDataSetSafeArray, theData, COleVariant("My Dataset"), COleVariant(1l), optVt, optVt, fldsVt, optVt); // Create a theme based on the "Sales" column in the // new dataset ds.GetThemes().Add(miThemeIndividualvalue, "Sales", "My Theme"); } catch (COleDispatchException *e) { e->ReportError(); e->Delete(); } catch (COleException *e) { e->ReportError(); e->Delete(); } } |
|
|