社区
ATL
帖子详情
高手们站出来给个数据类型如wchar等互转换的完整版如何,很见功力啊
xiguazi
2003-02-21 09:31:36
请拉
...全文
45
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
编译器之后端原理(三十六)
1. 编译器的前端技术,重点是让编译器能够读懂程序,无结构的代码文本经过前端的处理以后,就变成了Token、AST和语义属性、符号表等结构化的信息,基于这些信息,可以实现简单的脚本解释器。但很多情况下,需要继续...
C语言调试
在编写代码的过程中,相信大家肯定遇到过这样的情况:代码能够编译通过,没有语法错误,但是运行结果却不对,反复检查了很多遍,依然不知道哪里出了问题。这个时候,就需要调试程序了。 所谓调试(Debug),就是...
编译型语言后端原理笔记
1. 编译器的前端技术,重点是让编译器能够读懂程序,无结构的代码文本经过前端的处理以后,就变成了Token、AST和语义属性、符号表等结构化的信息,基于这些信息,可以实现简单的脚本解释器。但很多情况下,需要继续...
Makefile教程,很详细的东西,收藏了~长文慎点=。=
或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个...
浅谈python中使用C/C++:ctypes
{ 如果你需要用自定义的
数据类型
来当作参数传递的话,需要参数中有个名为_as_parameter_的变量,ctypes会去找这个名字的变量来当作参数传递。涉及自定义类的内容不作展开。 } 访问导出变量 和函数一样,dll中的导出...
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章