如题!急!!

解决方案 »

  1.   

    一下有一段代码你参考一下
    //设置线的点,并且画线
    short CCYTLineCtrl::SetLine(const VARIANT FAR& varLine) 
    {
    // TODO: Add your dispatch handler code here
    DeleteAll();
    /* switch(varLine.vt )
    {
    case VT_UI1:
    AfxMessageBox("I1");
    break;
    case VT_I2:
    AfxMessageBox("I2");
    break;
    case VT_I4:
    AfxMessageBox("I4");
    break;
    case VT_ARRAY :
    AfxMessageBox("Arr");
    break;
    case VT_BYREF|VT_UI1:
    AfxMessageBox("ArrI1");
    break;
    case VT_BYREF|VT_I2:
    AfxMessageBox("arri2");
    break;
    case VT_EMPTY:
    AfxMessageBox("error");
    break;
    case VT_BYREF|VT_DISPATCH:
    AfxMessageBox("arrDis");
    break;
    case VT_BYREF|VT_UNKNOWN:
    AfxMessageBox("arrUnk");
    break;
    case VT_BYREF|VT_BSTR:
    AfxMessageBox("arrBS");
    break;
    case VT_BYREF|VT_DATE:
    AfxMessageBox("arrDate");
    break;
    case VT_BYREF|VT_CY:
    AfxMessageBox("arrCY");
    break;
    case VT_BYREF|VT_ERROR:
    AfxMessageBox("arrErr");
    break;
    case VT_BYREF|VT_I4:
    AfxMessageBox("arrI4");
    break;
    //case VT_BYREF|VT_I2:
    // AfxMessageBox("arrI2");
    // break;
    case VT_VARIANT | VT_BYREF:
    AfxMessageBox("arrByte");
    break;
    }
    VARIANT *ppVar=varLine.pvarVal ;
    switch(ppVar ->vt  )
    {
    case VT_UI1:
    AfxMessageBox("I1");
    break;
    case VT_I2:
    AfxMessageBox("I2");
    break;
    case VT_I4:
    AfxMessageBox("I4");
    break;
    case VT_ARRAY :
    AfxMessageBox("Arr");
    break;
    case VT_BYREF|VT_UI1:
    AfxMessageBox("ArrI1");
    break;
    case VT_BYREF|VT_I2:
    AfxMessageBox("arri2");
    break;
    case VT_EMPTY:
    AfxMessageBox("error");
    break;
    case VT_BYREF|VT_DISPATCH:
    AfxMessageBox("arrDis");
    break;
    case VT_BYREF|VT_UNKNOWN:
    AfxMessageBox("arrUnk");
    break;
    case VT_BYREF|VT_BSTR:
    AfxMessageBox("arrBS");
    break;
    case VT_BYREF|VT_DATE:
    AfxMessageBox("arrDate");
    break;
    case VT_BYREF|VT_CY:
    AfxMessageBox("arrCY");
    break;
    case VT_BYREF|VT_ERROR:
    AfxMessageBox("arrErr");
    break;
    case VT_BYREF|VT_I4:
    AfxMessageBox("arrI4");
    break;
    //case VT_BYREF|VT_I2:
    // AfxMessageBox("arrI2");
    // break;
    case VT_VARIANT | VT_BYREF:
    AfxMessageBox("arrByte");
    break;
    case VT_R4:
    AfxMessageBox("R4");
    break;
    case VT_R8:
    AfxMessageBox("R8");
    break;
    }*/
    VARIANT *ppVar=varLine.pvarVal ;
    SAFEARRAY *pSafe=NULL;
    pSafe=ppVar->parray ;
    if(pSafe==NULL) return 0;
    long uBound=0;
    SafeArrayGetUBound(pSafe,1,&uBound);
    VARIANT *pvar=NULL;
    SafeArrayLock(pSafe);
    pvar=(VARIANT*)pSafe->pvData ;
    SafeArrayUnlock(pSafe);
    USES_CONVERSION;
    CString strPoint;
    CComBSTR bstr;
    VARIANT var;
    SAFEARRAY* pSafevar=NULL;
    //VARIANT *pVal=NULL;
    long uBound1=0;
    BSTR *pvarPt=NULL;
    CPoint pt;
    //CArray<POINT,POINT>ptArray;
    CString strText;
    for(int i=0;i<uBound+1;i++)
    {
    var=pvar[i];
    //pVal=var.pvarVal;
    pSafevar=var.parray ;
    uBound1=0;
    pvarPt=NULL;
    if(pSafevar==NULL) continue;
    //ptArray.RemoveAll ();
    SafeArrayGetUBound(pSafevar,1,&uBound1);
    SafeArrayLock(pSafevar);
    pvarPt=(BSTR*)pSafevar->pvData ;
    CLine* pLine=NULL;
    pLine=new CComObject<CLine>;
    //pLine->AddRef ();
    if(pvarPt==NULL || pLine==NULL) continue;
    for(int j=0;j<uBound1+1;j++)
    {
    bstr=pvarPt[j];
    strPoint=OLE2T(bstr);
    } }
      

  2.   

    BOOL CVCondlg::TransVarToBuf(VARIANT& var, LPBYTE lpBuf, int nBufLen)
    {
    LPBYTE lpVarBuf = NULL; if ( (NULL != var.parray) 
    && (var.vt == (VT_ARRAY | VT_UI1)) 
    && (1 == SafeArrayGetDim(var.parray))
       )
    {
    // Validate the buffer bounds
    long UpperBounds;
    long LowerBounds; SafeArrayGetLBound(var.parray, 1, &LowerBounds);
    SafeArrayGetUBound(var.parray, 1, &UpperBounds); if ((LowerBounds == 0) && (UpperBounds >= nBufLen - 1))
    {
    SafeArrayAccessData(var.parray, (void* *)&lpVarBuf); memcpy(lpBuf, lpVarBuf, nBufLen); SafeArrayUnaccessData(var.parray); return TRUE;
    }
    } return FALSE;
    }