社区
ATL
帖子详情
高手们站出来给个数据类型如wchar等互转换的完整版如何,很见功力啊
xiguazi
2003-02-21 09:31:36
请拉
...全文
115
8
打赏
收藏
高手们站出来给个数据类型如wchar等互转换的完整版如何,很见功力啊
请拉
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ruihuahan
2003-02-26
打赏
举报
回复
对。ATL的数据转换宏很好用的。但要注意首先使用USES_CONVERSION
laohenry
2003-02-26
打赏
举报
回复
呵呵。。共享。
STDAPI_(LPWSTR) ConvertToLPWSTR(LPCSTR pszString)
{
LPWSTR pwsz;
UINT cblen;
CHECK_NULL_RETURN(pszString, NULL);
cblen = lstrlen(pszString);
if ((pwsz = (LPWSTR)MemAlloc((cblen+1)*sizeof(WCHAR))) &&
(0 == MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, pszString, cblen, pwsz, cblen + 1)))
{
MemFree(pwsz); pwsz = NULL;
}
return pwsz;
}
STDAPI_(BSTR) ConvertToBSTR(LPCSTR pszString)
{
BSTR bstr = NULL;
LPWSTR pwsz;
if (pwsz = ConvertToLPWSTR(pszString))
{
bstr = SysAllocString(pwsz);
MemFree(pwsz);
}
return bstr;
}
STDAPI_(LPSTR) ConvertToANSI(LPCWSTR pwszString)
{
LPSTR psz;
UINT cblen;
CHECK_NULL_RETURN(pwszString, NULL);
cblen = WideCharToMultiByte(CP_ACP, 0, pwszString, -1, NULL, 0, NULL, NULL);
if ((psz = (LPSTR)MemAlloc(cblen + 1)) &&
(0 == WideCharToMultiByte(CP_ACP, 0, pwszString, -1, psz, cblen, NULL, NULL)))
{
MemFree(psz); psz = NULL;
}
return psz;
}
brave_heart
2003-02-22
打赏
举报
回复
ATL 里有一些串转换宏,很好用
ATL String Conversion Macros
USES_CONVERSION;
A2BSTR OLE2A T2A W2A
A2COLE OLE2BSTR T2BSTR W2BSTR
A2CT OLE2CA T2CA W2CA
A2CW OLE2CT T2COLE W2COLE
A2OLE OLE2CW T2CW W2CT
A2T OLE2T T2OLE W2OLE
A2W OLE2W T2W W2T
在函数中,如果你想把转换后的结果通过输出参数输出,那么就必须
用SysAllocString申请一块Heap内存,再传出去。不能直接传转换宏的
结果。举个例子
HRESULT get_string(/* out */ BSTR bstrOut)
{
char* p = get_some_string();
USES_CONVERSION;
bstrOut = A2BSTR(p); // error
bstrOut = SysAllocString(A2BSTR(p)); // right way
return S_OK;
}
注意,调用get_string()的代码负责释放(SysFreeString)输出串bstrOut。
林仪明
2003-02-22
打赏
举报
回复
就是啊!也请到这个帖子去!一共是300分啊!
http://expert.csdn.net/Expert/topic/1452/1452788.xml?temp=.8216974
brave_heart
2003-02-22
打赏
举报
回复
上面给的例子有1个bug, 你看出来了吗?
HRESULT get_string(/* out */ BSTR* bstrOut)
{
char* p = "Hello World.";
USES_CONVERSION;
// 因为A2BSTR 内部也调用了SysAllocStringLen,所以可以直接
// 传出去。
*bstrOut = A2BSTR(p);
return S_OK;
}
Rigel
2003-02-22
打赏
举报
回复
学习
xiguazi
2003-02-21
打赏
举报
回复
BSTR->LPSTR
BSTR word;
USES_CONVERSION;
OLE2A(word);
char* -> BSTR
char buf[10];
BSTR word;
USES_CONVERSION;
word = SysAllocString(A2W(buf));
xiguazi
2003-02-21
打赏
举报
回复
gz
字符串处理实战:5分钟学会用C语言统计字符频率(含避坑指南)
本文通过C语言统计字符频率的实战案例,深入解析字符串处理的核心技术与常见陷阱。文章详细介绍了从基础实现到性能优化的完整方案,包括频率表构建、指针运算优化及输入缓冲区处理等关键技巧,并提供了处理宽字符与UTF-8编码的进阶思路,帮助开发者编写高效、健壮的底层文本处理工具。
C++格式占位符详解:从底层原理到安全实践
格式占位符是C/C++中格式化输入输出的核心机制,它定义了数据在内存中的表示与外部文本之间的
转换
规则。其工作原理基于变长参数列表,编译器依赖占位符的类型说明来正确解析栈上的数据。理解并正确使用占位符对于保障程序的内存安全、防止缓冲区溢出等未定义行为至关重要,尤其在系统编程和嵌入式开发等底层场景中。本文聚焦于`printf`和`scanf`函数族,深入剖析占位符的语法、内存模型及常见陷阱,并探讨如何通过`长度修饰符`确保类型安全,以及在现代C++中采用`std::format`等更安全的替代方案。
C++函数指针实战:告别硬编码,优雅调用游戏逆向函数
在软件工程中,函数指针是一种强大的编程机制,它允许程序在运行时动态绑定并调用函数。其核心原理是将函数的内存地址存储在指针变量中,通过解引用该指针来执行目标函数。这项技术的核心价值在于实现了代码的灵活性与解耦,尤其在需要动态加载或替换函数逻辑的场景中至关重要。在游戏逆向、插件开发、外挂检测等底层交
互
领域,经常需要直接调用游戏进程内的特定函数。传统硬编码函数地址的方式存在维护困难、兼容性差等弊端。通过C++函数指针,结合逆向分析得到的函数签名(如调用约定、参数列表),可以构建出类型安全、可动态配置的调用接口。本
C++学习入门:CLion集成开发环境配置与实战指南
集成开发环境(IDE)是现代软件开发的核心工具,它通过整合代码编辑、编译、调试和项目管理等功能,极大提升了开发效率。对于C++这类语法复杂、编译依赖多的语言,一个优秀的IDE能有效降低学习门槛,帮助开发者专注于逻辑实现而非环境配置。JetBrains CLion作为一款专为C/C++设计的智能IDE,凭借其深度集成的CMake支持和强大的代码分析能力,在工程实践中展现出显著价值。它特别适合初学者和转语言开发者快速搭建C++学习环境,通过智能代码补全、实时错误检查和图形化调试工具,将开发体验从“打字员”升级为
C语言字符串函数全解析:从基础原理到安全编程实践
在C语言编程中,字符串处理是核心基础,涉及字符数组、内存管理和空字符终止等底层概念。其原理基于对连续内存字节的直接操作,通过标准库函数实现高效的数据处理。掌握这些函数的技术价值在于能够编写出高效、稳定且内存安全的程序,避免缓冲区溢出等常见漏洞。在应用场景上,无论是系统编程、嵌入式开发还是网络数据处理,都离不开字符串的复制、比较、查找与分割等操作。本文聚焦于C语言字符串函数,深入探讨strcpy、strncpy、strcat等关键工具的安全用法与典型陷阱,并结合strlen和memcpy等函数,解析如何在实际
ATL
3,248
社区成员
48,530
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章