首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中将BSTR转换为CHAR*,将CHAR*转换为BSTR

在C中将BSTR转换为CHAR*,将CHAR*转换为BSTR
EN

Stack Overflow用户
提问于 2010-12-22 20:04:13
回答 2查看 4.1K关注 0票数 0

我必须在C中将BSTR转换为CHAR*数据类型。有没有什么方法可以在不使用VC++库或函数的情况下这样做呢?代码必须是纯C语言的,我认为'comutil.h‘有一些函数,但我想它们是用C++编写的。

另外,关于SysAllocString函数,我们可以在C中使用它并转换为CHAR*吗?请帮帮忙。

谢谢,sveerap

EN

回答 2

Stack Overflow用户

发布于 2010-12-22 23:04:06

您可以使用SysAllocStringByteLen()将char*转换为BSTR。但是,只有当char*只包含ASCII字符时,这才是安全的,不会发生字符转换。这不会造成问题,这将是相当罕见的。

下一跳是MultiByteToWideChar(),您通常希望将CodePage参数设置为CP_ACP,除非您知道字符串是以另一种方式编码的。这将生成一个宽字符串,然后可以将其传递给SysAllocString()以获取BSTR。

另一种方法是WideCharToMultiByte(),直接传递BSTR将起作用,除非它包含嵌入的0个字符。但是,当您处理包含重音字符或无法在您使用的代码页中表示的任何其他内容的字符串时,要注意这可能会引起相当大的麻烦。

票数 2
EN

Stack Overflow用户

发布于 2010-12-22 21:06:14

这取决于您如何定义"VC++库或函数“。BSTR类型几乎是一种VC++类型。但是,如果您认为它是"Windows“类型,那么"Windows”库中有一些BSTR操作函数和您可以使用的"Windows“函数。这完全取决于您正在做什么,您使用的是什么编译器,以及任何其他技术限制。在这个问题中描述为什么不能使用VC++库将是一个好主意。

事实上,BSTR类型已经被很好地理解和记录了。参见here

如果由于某种原因不允许您使用任何Microsoft BSTR操作函数来编写自己的BSTR操作函数来在BSTRchar *之间进行转换,这并不是不可能的。

作为一个廉价和非常糟糕的技巧,我之前已经将BSTR转换为char *,然后将每个备用字符复制到缓冲区或类似的位置。然而,这不能处理特殊字符,这是一个非常非常糟糕的技巧。请不要这样做,除非您可以保证BSTR中的字符都是标准的ASCII字符(或者不关心它们是否为标准ASCII字符),并且这样做只是为了快速调试技巧或类似的东西,而不是适当的产品质量代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4508982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档