COM中使用CreateThead怎么传参数?

725137 2013-08-09 09:15:34
我建了一个COM对像。然后在一个接口方法里。。


typedef struct st
{
char * name;
int age;
}ST,*PST;




ST st ;

st.name = "zhansan";

MessageBox(NULL,st.name,"",0); //这里取出来的值成功显示,证明附值成功了

CreateThread(NULL,0,CAdapterObj::ThreadFun, &st ,0,NULL);



然后在




DWORD WINAPI CAdapterObj::ThreadFun(PVOID lpParameter)
{
PST pst = (PST)lpParameter;

MessageBox(NULL,(pst->name,"",0); //这里取出来的值为什么不对呢?


...全文
95 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ArcRain 2013-08-09
  • 打赏
  • 举报
回复
ST st ; st.name = "zhansan"; 你这是局部变量,离开作用域就没用了。线程里再去获取当然就是个无效地址了。
woshinia 2013-08-09
  • 打赏
  • 举报
回复
引用 3 楼 akirya 的回复:
C C++要用_beginthreadex创建线程不要用CreateThread
只要不用strtok之类的c函数,其实一样。 楼主的错误在于:一,st是在栈中分配的,函数结束就被释放了,需要new。 二,st中的name也只是个指针,因为"zhansan"在常量区,不会丢失,是没错的。但如果是char a[] = "zhansan",st.name = a;这样就会丢失,理由同一。所以一般做法是 typedef struct st { char name[128]; int age; }ST,*PST;
  • 打赏
  • 举报
回复
C C++要用_beginthreadex创建线程不要用CreateThread
mcaok 2013-08-09
  • 打赏
  • 举报
回复
ST st ; 这句改成ST* pst = new ST;

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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