double arr[10][240];申请的空间当GetData退出的时候就释放了,
p是得不到它的值的

解决方案 »

  1.   

    我想2维数组用SaveArray实现比较好,size_is好象只接受一个参数
      

  2.   

    在msdn里查找safe array,有详细说明。
      

  3.   

    你可以直接在函数中给*p分配内存,比如:
     *p = (double *)malloc(..);
      

  4.   

    wistaria说得对,即使分配了空间,服务进程中分配的空间,客户进程怎么能用一个指针就能访问?不可能!我看最简单的办法就是用SafeArray!
      

  5.   

    HRESULT hResult;
    SAFEARRAY *psa;
    SAFEARRAYBOUND ArrBound[1];
    ArrBound[0].lLbound = 0;
    ArrBound[0].cElements = 10;
    psa = SafeArrayCreate(VT_I2 , 1 , ArrBound);
    if(psa == NULL){
           hResult = ResultFromScode(E_OUTOFMEMORY);
           AfxMessageBox("Error in Allocate SafeArray");
           return hResult;
    }

     
    long Redirection[1] = {0};
    short input=0;
    int k;
    for ( k=0 ; k<10 ; k++)
    {
             var.iVal = k;
             input = k;
             Redirection[0] = k;
    hResult = SafeArrayPutElement(psa , Redirection ,(void* ) &k);
    if (FAILED(hResult))
    {
    AfxMessageBox("Error in assign element");
    hResult = SafeArrayDestroy(psa);
    return hResult;
    }各位大虾,以上是我用safe array做的一维数组的添加元素(element),
    每次SafeArrayPutElement返回的时候,都是正确的不报错,可是用一下的代码取不到数据,
    我是完全按照msdn上的例程写代码的.VARIANT   var;
    var.iVal = 0;
    short temp = 0;
    for (k=0 ; k<10 ; k++)
    {
    Redirection[0] = k;
    hResult = SafeArrayGetElement(psa , Redirection , &var);
    if(FAILED(hResult))
    {
    AfxMessageBox("Error in Getting Elements in the array");
    hResult = VariantClear(&var);
    hResult = SafeArrayDestroy(psa);
    return hResult ;
    }
    temp = var.iVal;
    }
      

  6.   

    还有一个问题,各位说用safe array是指在接口的定义中使用safe array作为传输的数据的类型
    还是在程序中用safe array分配地址空间,然后用copy 到 double** 中去,这样做可行吗?