CStringArray paramArray; //创建数组
.....给数组赋值m_DealClass.DoOperate(&paramArray); //直接调用没有问题
/********** DoOperate 实现 **********/
VOID OpeateDeal::DoOperate(int ifunc, CStringArray *paramArray,HWND sendhwnd)
{
int ilen = paramArray->GetSize(); //取值没有问题
}
**********/但是请求很多,我想异步处理,就是先将这些 paramArray 存放起来,在用一个timer触发typedef struct  
{   
CStringArray *paramArray;
HWND hWnd;
} DefaultInfo;
CArray <DefaultInfo, DefaultInfo&> g_DefaultInfoArray; DefaultInfo myStruct;
myStruct.hWnd = hWnd;
myStruct.paramArray = &paramArray; //&paramArray就是上面直接调用的参数 g_DefaultInfoArray.Add(myStruct);
//保存到一个全局的 g_DefaultInfoArray 中
timer:int ilen = g_DefaultInfoArray.GetSize();if(ilen > 0)
{
for(int i=0;i<ilen;i++)
{
DefaultInfo myStruct = g_DefaultInfoArray.ElementAt(i); m_DealClass.DoOperate(myStruct.func,myStruct.paramArray,myStruct.hWnd);

} g_DefaultInfoArray.RemoveAll();
}
这样调用 m_DealClass.DoOperate,为什么  myStruct.paramArray 传入后再通过 paramArray->GetSize(); 取值就不行了呢?什么原因呢?求助,帮忙阿,很着急的!!!!

解决方案 »

  1.   

    CStringArray最好不要用指针传递,直接用引用
      

  2.   

    myStruct.paramArray = paramArray;
    你多加了一重指针
      

  3.   

    to goodboyws:typedef struct  
    {   
    CStringArray *paramArray;
    HWND hWnd;
    } DefaultInfo;还是这样定义吗?编译报错阿?
      

  4.   

    myStruct.paramArray = &paramArray; 第二paramArray是怎么定义的,贴完整代码
      

  5.   

    完整代码:
    声明部分:typedef struct  
    {   
    int func;
    CStringArray *paramArray;
    HWND hWnd;
    } DefaultInfo;CArray <DefaultInfo, DefaultInfo&> g_DefaultInfoArray;
    赋值语句:
    DefaultInfo myStruct;
    myStruct.func = ifunc;
    myStruct.hWnd = hWnd;
    myStruct.paramArray = &paramArray; g_DefaultInfoArray.Add(myStruct);
     取值语句:
    int ilen = g_DefaultInfoArray.GetSize(); if(ilen > 0)
    {
    for(int i=0;i<ilen;i++)
    {
    DefaultInfo myStruct = g_DefaultInfoArray.ElementAt(i);
    m_DealClass.DoOperate(myStruct.func,myStruct.paramArray,myStruct.hWnd); } g_DefaultInfoArray.RemoveAll();
    }
    函数声明:VOID OpeateDeal::DoOperate(int ifunc, CStringArray *paramArray,HWND sendhwnd)
    {
    int ilen = paramArray->GetSize();
    } paramArray->GetSize(); 这里取出的值是错误的!!!!!!编译没有问题,但是传过去后出现问题,请帮忙看看!!!!!!
      

  6.   

    老大,你还是没告诉我
    myStruct.paramArray = &paramArray;是放在哪儿的,第二个paramArray是怎么定义的,晕
      

  7.   

    CStringArray paramArray;
    CString szTemp;
    int i=0; while(AfxExtractSubString( szTemp, strparams, i++, g_SplitChar))
    {
    paramArray.Add(szTemp);
    }
      

  8.   

    paramArray是局部变量,等到m_DealClass.DoOperate(myStruct.func,myStruct.paramArray,myStruct.hWnd);已经被释放了
      

  9.   

    依照 goodboyws(深夜不眠者) 的提示已经高定不传数组,直接字符串传入函数再处理结贴