社区
ATL
帖子详情
高手们站出来给个数据类型如wchar等互转换的完整版如何,很见功力啊
xiguazi
2003-02-21 09:31:36
请拉
...全文
55
8
打赏
收藏
高手们站出来给个数据类型如wchar等互转换的完整版如何,很见功力啊
请拉
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
浅谈python中使用C/C++:ctypes
前言python这门语言,凭借着其极高的易学易用易读性和丰富的扩展带来的学习友好性和项目友好性,近年来迅速成为了越来越多的人们的首选。然而一旦拿python与传统的编程语言(C/C++)如来比较的话,人们往往会想到效率问题。本文不打算探讨语言之间的比较,然而python实际使用时确实会有能用更底层的C/C++更好的情况,因此本系列旨在介绍几种相对常见的python环境下调用C/C++的方法。(挖坑:CTYPES,SWIG,BOOST.PYTHON,CYTHON) 阅读这篇文章需要什么?语言:简单的pyth
编译器之后端原理(三十六)
一、编译器的后端技术 1. 编译器的前端技术,重点是让编译器能够读懂程序,无结构的代码文本经过前端的处理以后,就变成了Token、AST和语义属性、符号表等结构化的信息,基于这些信息,可以实现简单的脚本解释器。但很多情况下,需要继续把程序编译成机器能读懂的代码,并高效运行。这时就面临了三个问题: (1)必须了解计算机运行一个程序的原理(也就是运行期机制),只有这样才知道如何生成这样的程序。 (2)要能利用前端生成的AST和属性信息,将其正确翻译成目标代码。 (3)需要对程序做尽可能多的优化,比如让程序
C语言调试
1.调试的概念以及调试器的选择 在编写代码的过程中,相信大家肯定遇到过这样的情况:代码能够编译通过,没有语法错误,但是运行结果却不对,反复检查了很多遍,依然不知道哪里出了问题。这个时候,就需要调试程序了。 所谓调试(Debug),就是让代码一步一步慢慢执行,跟踪程序的运行过程。比如,可以让程序停在某个地方,查看当前所有变量的值,或者内存中的数据;也可以让程序一次只执行一条或者几条语句,看看
编译型语言后端原理笔记
一、编译器的后端技术 1. 编译器的前端技术,重点是让编译器能够读懂程序,无结构的代码文本经过前端的处理以后,就变成了Token、AST和语义属性、符号表等结构化的信息,基于这些信息,可以实现简单的脚本解释器。但很多情况下,需要继续把程序编译成机器能读懂的代码,并高效运行。这时就面临了三个问题: (1)必须了解计算机运行一个程序的原理(也就是运行期机制),只有这样才知道如何生成这样的程序。 (2)要能利用前端生成的AST和属性信息,将其正确翻译成目标代码。 (3)需要对程序做尽可能多的优化,比如让程
DirectX12(D3D12)基础教程
(重新更新全部源码于2022-4-12日)在之前的一系列概念介绍式的文章之后,从此文让我们正式开始DirectX12(D3D12,以后都统一称为D3D12)编程学习之旅。首先大家一看到这个标题一定以为我是不是打字重复了?其实我是故意这样强调基础这个概念的。因为目前我看到的无论是微软的D3D12教程还是Nvidia的D3D12教程,以及网上其他的一些教程都是使用了一些C++类封装之后的示例(甚至有些简单的示例都使用了非常重量级的封装库,给我们学习、编译、调试等带来了不必要的困难)。
ATL
3,248
社区成员
48,529
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章