网上找到很多结果,中文的,外文的。像codeproject,stackoverflow等等,看到的结果都不能解决问题。

自己动手,丰衣足食。

msdn上说,CString可以用来随意替换const char* and LPCTSTR 类型的函数形参。随意转换就是了。具体不深究,解决问题先。

声明一下使用目的:给新开线程传入CString类型字符串值,但AfxBeginThread函数需要传入LPVOID类型参数。于是,矛盾开始了。

static  CString s=_T("640x480_3.jpg");//如果函数内,一定要声明是static,否则在别的函数调用本函数声明的自动变量,除非你想开玩笑。或者全局(静态)变量。总之要保证另一个函数可以访问这个地址。

先看几个相关的地址(位于当前线程,当时调试环境):

s的地址:

m_pszData = 0x0184e0a0 "640x480_3.jpg"
s.GetBuffer()(真正数据的地址):
m_pszData = 0x0184e0e0 "640x480_3.jpg"

CString *p=&s:
p = 0x2d6bd764 {0x0184e0a0}
m_pszData = 0x0184e0a0 "640x480_3.jpg"

传递p肯定不对。可以传递(LPVOID)p->GetBuffer()=(LPVOID)s.GetBuffer():0x0184e0e0 ,但实际lpParam获得的地址依然是0x0184e0a0 。

先提示一句,要想调用函数能够准确获得CString数据,必须且只能传递s对象的地址“0x0184e0a0”,并不是&s。
现在总结一下可行的调用方法:
1.        AfxBeginThread(ThreadFunction,(LPVOID)(LPCTSTR)s);//这个必须是s的地址了。
即,(LPVOID)(LPCTSTR)s=s的地址=lpParam = 0x0184e0a0 {void*}
其他的传入参数均不正确。如(LPVOID)((LPCTSTR))s.GetBuffer()=0x0184e0e0 获取到的数据为空。

至于其他的CString*什么的转换,我这里没有尝试,切记,传入s对象的地址。

2.       AfxBeginThread(ThreadFunction,(LPVOID)s.GetBuffer());

s.GetBuffer()的地址肯定不等于s对象的地址,但ThreadFunction中的 lpParam获得的依然是正确的s对象的地址。

这种调用竟然也可以,暂未研究。

还有一种情况,如果传入的是字符串常量值,可以这样调用:
3.       AfxBeginThread(ThreadFunction,(LPVOID)_T("640x480_3.jpg"));

其实这也很好理解,此时传入的是保存字符串字面常量_T("640x480_3.jpg")的位置的地址,相当于上面的s。

接收函数:
UINT ThreadFunction(LPVOID lpParam)
{
 CString fileName=(LPCTSTR)lpParam;//上面3种情况均测试,可以正确解析。
}

希望这些方法在大家的电脑上一样顺利运行。good luck。

转载地址:http://blog.csdn.net/a0700746/article/details/6629899

CString和LPVOID的转换(线程参数传递)相关推荐

  1. CString和LPVOID的转换(线程参数传递) .

    网上找到很多结果,中文的,外文的.像codeproject,stackoverflow等等,看到的结果都不能解决问题. 自己动手,丰衣足食. msdn上说,CString可以用来随意替换const c ...

  2. CSTRING与lpvoid之间的转换

    / //功能:将LPVOID类型的变量转换为CString类型 //参数:LPVOID类型的指针 //返回值:转换后的CString类型 // CString LpvToStr( const LPVO ...

  3. 关于Char* ,CString ,WCHAR*之间的转换问题

    GDI+所有类的接口函数如果要传递字符串作为参数的话,似乎都用UNICODE串,即WCHAR*.我开始也被整得晕头转向,因为窗口编程所用往往是CString,用IO流读文件数据又得到char *.得益 ...

  4. Unicode字符集下CString/tchar*与char *转换 (解决中文乱码等)

    Unicode环境下宽字符------->窄字符的转换 定义:TCHAR m_szIp[MAX_IP_LEN];   我们要将TCHANR类型数组(宽字符型)转换为char*pBuffer类型( ...

  5. MFC中CString和int的转换

    int转换为CString: CString csName; int num; csName.Format("%d", num); CString转换为int: CString c ...

  6. MFC开发IM-第十七篇、CString TCHAR的互相转换

    CString->TCHAR*的转化可以用函数GetBuff() 函数原型为:LPTSTR GetBuffer( int nMinBufLength ); CString str("C ...

  7. BSTR与CString之前的转换

    一. BSTR是进行COM编程时试用的字符串类型,对BSTR类型变量进行复制有两种方式: 1. CString提供的转换函数,CString::AllocSysString来进行转换: CString ...

  8. CString char BSTR 转换

    一.CString, int, string, char*之间的转换 string 转 CString CString.Format("%s", string.c_str()); ...

  9. Java线程状态及其转换

    Java线程的状态及转换 线程状态及其转换 线程的状态 详细介绍: 新建状态(NEW): 就绪状态(RUNNABLE): 运行状态(RUNNING): 阻塞状态(BLOCKED): 等待状态(WAIT ...

  10. CString与string转换

    string转CString 在使用MFC时,遇到了CString与string转换的问题,特此记录下来.其实CString与string的转换方式有挺多种的,但也并不是每一种都适用,可能需要一些稍微 ...

最新文章

  1. RiboFR-Seq:将16S rRNA与宏基因组连接的方法
  2. mysql 5.1.69_CentOS 安装MySQL 5.1.69
  3. 【辨异】inner, internal, interior, inward
  4. M1 MacBook Air值不值得买?使用体验分享
  5. java 迭代器_Java中 ( Iterator ) 迭代器 详解 ( JDK8源码 )
  6. JAVA 内部类 泛型 实现堆栈
  7. paip.分成系统会员推广分销系统的设计
  8. 对python语言的认识_认识Python语言和基础知识
  9. linux命令 视频教程,常用的linux命令视频教程
  10. 商用密码产品认证-数字证书认证系统
  11. Mac 在 Appstore 下载 hight Sierra 10.13
  12. 工业机器人(6)川崎机器人仿真软件K-ROSET
  13. 两个mysql 数据库表结构_MYSQL对比两个数据库表结构
  14. [Trie树] BZOJ3689: 异或之
  15. 【Unity 3D】简易小车游戏
  16. Linux_Oracle_11g_R2_RAC_安装配置详细过程
  17. OpenSSL FIPS安装
  18. 简约资源教程分享网模板,emlog模板
  19. APS高级计划排程系统,工厂各部门实施前后有哪些区别?
  20. Ubuntu下利用docker安装微信

热门文章

  1. Redis 增加互斥锁
  2. 小米手机不断自己重启问题解决
  3. 小米6无限重启无服务器,网友投诉小米手机无限重启 官方客服已回复
  4. H.264中CBR VBR FIXQP
  5. 2022-2028年中国商用车融资租赁行业市场调查研究及发展前景规划报告
  6. 文件夹批量重命名001开始的方法
  7. 单元格下拉框实现复选框多选_将复选框链接到带有宏的单元格
  8. 为什么ps不能用计算机,电脑ps软件的填充功能无法使用怎么处理
  9. PDF文件太大怎么压缩
  10. 【Jectpack】DataStore