我的控件借口函数定义如下
long AcquireBulkDataToMemory(
  long dataCount,
  VARIANT* dataBuffer,
  long timeOut = 0,
  boolean cyclic = false,
  boolean synchronous = true
);
其中VARIANT* dataBuffer,
参数要如何传参,定义一个VARIANT*类型指针是不是还要初始化.

解决方案 »

  1.   

    int i;
    dataBuffer = &(VARIANT(i));
    初始化不需要
      

  2.   

    这里的VARIANT is defined as VT_ARRAY|VT_I2 不是整型的
      

  3.   

    具体要看你这个接口的定义了,你可以打开控件的IDL文件查看参数的定义。
    如dataCount、dataBuffer是[in]还是[out]属性,看你这个函数的名称,我怎么感觉dataBuffer像被测试对象,而
    dataCount像返回值。
      

  4.   

    这种参数一般是调用者构造,函数体中来赋值。
    调用者应该这样:
    ......
    VARIANT vtBuffer;
    VariantInit(&vtBuffer);
    AcquireBulkDataToMemory(32, &vtBuffer, ...);在你的函数体类应该这样:
    long   AcquireBulkDataToMemory( 
        long   dataCount, 
        VARIANT*   dataBuffer, 
        long   timeOut   =   0, 
        boolean   cyclic   =   false, 
        boolean   synchronous   =   true 
    )
    {
        ......
        V_VT(dataBuffer) = VT_BSTR;
        V_BSTR(dataBuffer) = ::SysAlloceString(...);
        ......
    }
      

  5.   

    dataBuffer是用来存储采样数据的是OUT的,而且必须定义成一维短整型数组
      

  6.   

    使用SAFEARRAYCComSafeArray<short> sa;
    sa.Add(...);
    V_VT(dataBuffer) = VT_ARRAY | VT_BYREF;
    V_ARRAY(dataBuffer) = sa.Detach();
      

  7.   

    V_VT(dataBuffer)   =   VT_ARRAY | VT_I2; 
      

  8.   


    long   dataCount=10;
    SAFEARRAY saVector;
    SAFEARRAYBOUND rgsabounds[] = { {dataCount, 0} };
    SafeArrayCreate(VT_I1,1,rgsabounds); VARIANT var;
    VariantInit(var);
    V_VT(var)=VT_ARRAY;
    var.parray=&saVector;
    AcquireBulkDataToMemory(dataCount,&var); 
      

  9.   

    不好意思,上面错了。 long   dataCount=10;
    SAFEARRAY* saVector;
    SAFEARRAYBOUND rgsabounds[] = { {dataCount, 0} };
    saVector=SafeArrayCreate(VT_I2,1,rgsabounds); VARIANT var;
    VariantInit(var);
    V_VT(var)=VT_ARRAY;
    var.parray=saVector;
    AcquireBulkDataToMemory(dataCount,&var); 
      

  10.   

    我晕~~,上面还是错的。 long   dataCount=10;
    SAFEARRAY* saVector;
    SAFEARRAYBOUND rgsabounds[] = { {dataCount, 0} };
    saVector=SafeArrayCreate(VT_I1,1,rgsabounds); VARIANT var;
    VariantInit(&var);
    V_VT(&var)=VT_ARRAY;
    var.parray=saVector;
    AcquireBulkDataToMemory(dataCount,&var); 
      

  11.   

    yxz_lp 正解
    多谢大家了:)