用php做一网站,百图汇免费素材图库,网址导航可以卸载吗,网页上的视频怎么保存到本地MFC常用技巧1、句柄MFC中如何获取窗口的句柄2、字符串CString转char*Unicode下char *转换为CString3、Visual C 64 位迁移的常见问题#xff08;数据类型、指针类型的长度问题#xff09;4、c - 将_beginthread返回的uintptr_t转换为HANDLE是否安全1、句柄
MFC中如何获取窗口…
MFC常用技巧1、句柄MFC中如何获取窗口的句柄2、字符串CString转char*Unicode下char *转换为CString3、Visual C 64 位迁移的常见问题数据类型、指针类型的长度问题4、c - 将_beginthread返回的uintptr_t转换为HANDLE是否安全1、句柄
MFC中如何获取窗口的句柄
http://www.ekangw.net/news/2022/0924/194873.html 2、字符串
CString转char*
1、Unicode下 CString转换为char * 方法1使用函数 T2A、W2A
CString cstr _T(test)
//声明标识
USES_CONVERSION;
//函数T2A和W2A均支持ATL和MFC中的字符
char * pFileName T2A(cstr);
//char * pFileName W2A(cstr); //也可实现转换注意有时候可能还需要添加引用#include afxpriv.h方法2使用APIWideCharToMultiByte进行转换
CString str _T(test);//注意以下n和len的值大小不同n是按字符计算的len是按字节计算的
int n str.GetLength();//获取宽字节字符的大小大小是按字节计算的int len WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),NULL,0,NULL,NULL);//为多字节字符数组申请空间数组大小为按字节计算的宽字节字节大小
char * pFileName new char[len1]; //以字节为单位//宽字节编码转换成多字节编码
WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),pFileName,len,NULL,NULL);
pFileName[len1] /0; //多字节字符以/0结束Unicode下char *转换为CString
方法1使用APIMultiByteToWideChar进行转换
char * pFileName test;//计算char *数组大小以字节为单位一个汉字占两个字节
int charLen strlen(pFileName);//计算多字节字符的大小按字符计算。
int len MultiByteToWideChar(CP_ACP,0,pFileName,charLen,NULL,0);//为宽字节字符数组申请空间数组大小为按字节计算的多字节字符大小
TCHAR *buf new TCHAR[len 1];//多字节编码转换成宽字节编码
MultiByteToWideChar(CP_ACP,0,pFileName,charLen,buf,len);buf[len] /0; //添加字符串结尾注意不是len1//将TCHAR数组转换为CString
CString pWideChar;
pWideChar.Append(buf);//删除缓冲区
delete []buf;方法二使用函数 A2T、A2W
char * pFileName test;
USES_CONVERSION;
CString s A2T(pFileName);
//CString s A2W(pFileName);方法三使用_T宏将字符串转换为宽字符
//书写代码使用TEXT()或_T()文本在UNICODE和非UNICODE程序里都通用
AfxMessageBox(_T(test string)); 注意直接转换在基于MBCS的工程可以但在基于Unicode字符集的工程中直接转换是不可行的CString会以Unicode的形式来保存数据强制类型转换只会返回第一个字符。3、Visual C 64 位迁移的常见问题数据类型、指针类型的长度问题
为了顺利实现两种平台的源代码级可移植性程序员应按照以下规则来编写程序或者修改已有程序
A、不能将指针转换成 int、uint、long、ulong、dword等字长固定为32位的类型 如果需要对指针做运算应把指针转换为intptr或 uintptr这两种类型在不同平台上才有正确的字长。另外由于handle实质上是一个指针void 因此把handle转换成long或ulong等类型也是不正确的。
B、如果确定需要对指针进行截断那么应使用ptrtolong()和ptrtoulong()两个函数在basetsd.h中定义来进行 它们可以屏蔽掉指针截断警告不过截断的结果不能够再当指针使用了。
C、当某个api函数的 out参数能返回一个指针时应小心谨慎处理参数 在win32中可以把一个ulong变量的地址进行强制转换后传递给api函数返回的指针就保存在 ulong变量中但在win64中返回的指针有64位如果使用ulong变量的话就会破坏其他变量的内容正确并且简单的方法是直接定义一个指针变 量把指针变量的地址作为参数传递给api函数。
参考链接https://blog.csdn.net/u011135902/article/details/50571955 4、c - 将_beginthread返回的uintptr_t转换为HANDLE是否安全 在x64构建中uintptr_t定义为64位值 typedef unsigned __int64 uintptr_t; 因此在这种情况下将其强制转换为HANDLE是安全的 参考链接https://www.lmlphp.com/user/163619/article/item/3254239