一个关于 CStringArray 传参数的问题,具体代码如下

火电 2005-11-24 11:42:32
CStringArray paramArray; //创建数组
.....给数组赋值

m_DealClass.DoOperate(¶mArray); //直接调用没有问题


/********** 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 = ¶mArray; //¶mArray就是上面直接调用的参数

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(); 取值就不行了呢?

什么原因呢?

求助,帮忙阿,很着急的!!!!
...全文
251 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
火电 2005-11-25
  • 打赏
  • 举报
回复
依照 goodboyws(深夜不眠者) 的提示

已经高定

不传数组,直接字符串传入函数再处理

结贴
goodboyws 2005-11-24
  • 打赏
  • 举报
回复
myStruct.paramArray = ¶mArray; 第二paramArray是怎么定义的,贴完整代码
火电 2005-11-24
  • 打赏
  • 举报
回复
to goodboyws:

typedef struct
{
CStringArray *paramArray;
HWND hWnd;
} DefaultInfo;

还是这样定义吗?

编译报错阿?
goodboyws 2005-11-24
  • 打赏
  • 举报
回复
myStruct.paramArray = paramArray;
你多加了一重指针
Kudeet 2005-11-24
  • 打赏
  • 举报
回复
CStringArray最好不要用指针传递,直接用引用
火电 2005-11-24
  • 打赏
  • 举报
回复
哦!!!!

原来这样!!!

哪依照我的意思
有什么方法可以先保存住他吗?
goodboyws 2005-11-24
  • 打赏
  • 举报
回复
paramArray是局部变量,等到m_DealClass.DoOperate(myStruct.func,myStruct.paramArray,myStruct.hWnd);已经被释放了
火电 2005-11-24
  • 打赏
  • 举报
回复
CStringArray paramArray;
CString szTemp;
int i=0;

while(AfxExtractSubString( szTemp, strparams, i++, g_SplitChar))
{
paramArray.Add(szTemp);
}
火电 2005-11-24
  • 打赏
  • 举报
回复
就是一个CStringArray阿!
火电 2005-11-24
  • 打赏
  • 举报
回复
CStringArray paramArray;
goodboyws 2005-11-24
  • 打赏
  • 举报
回复
老大,你还是没告诉我
myStruct.paramArray = ¶mArray;是放在哪儿的,第二个paramArray是怎么定义的,晕
火电 2005-11-24
  • 打赏
  • 举报
回复
完整代码:
声明部分:

typedef struct
{
int func;
CStringArray *paramArray;
HWND hWnd;
} DefaultInfo;

CArray <DefaultInfo, DefaultInfo&> g_DefaultInfoArray;


赋值语句:
DefaultInfo myStruct;
myStruct.func = ifunc;
myStruct.hWnd = hWnd;
myStruct.paramArray = ¶mArray;

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(); 这里取出的值是错误的!!!!!!



编译没有问题,但是传过去后出现问题,请帮忙看看!!!!!!



oyljerry 2005-11-24
  • 打赏
  • 举报
回复
定义了引用,就传递引用,定义了指针,就传递指针
注意保持变量的生命期

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧