BSTR转换为char *与char *在C BSTR(Convert BSTR to CHAR*

2019-10-30 04:15发布

我不得不转换BSTR为char *数据类型在C.反正有做到这一点,而无需使用VC ++库或者功能。 该代码必须是纯C.我觉得“comutil.h”已经得到了功能,但它们在C ++我想。

此外,关于SysAllocString功能,可我们用它在C和转换为char *? 请帮忙。

谢谢,sveerap

Answer 1:

您可以从一个char *去BSTR与SysAllocStringByteLen()。 但这只是如果字符*只包含ASCII字符,没有字符转换发生的安全。 这不会造成问题,将是非常罕见的。

下一跳是的MultiByteToWideChar(),您通常要设置的代码页参数CP_ACP除非您知道该字符串编码的另一种方式。 产生一个宽字符串,然后您可以传递给SysAllocString()来获得BSTR。

周围的其他方法是调用WideCharToMultiByte(),直接传递BSTR会工作,除非它包含嵌入的0个字符。 该转换是有损然而无论如何,提防相当头痛,当你与包含重音字符或其他任何东西,不能在你使用的代码页中表示字符串的工作这可能会导致。



Answer 2:

这取决于你如何定义“VC ++库或者功能”。 该BSTR类型是一个很值得VC ++类型。 然而,如果你认为这是一个“窗口”型则是在“窗口”库和您可以使用“视窗”功能BSTR操作功能。 这一切都取决于你在做什么,你正在使用什么编译器,以及其他任何技术限制。 这本来是一个好主意来形容,为什么你不能在这个问题用VC ++库。

事实上,BSTR类型是颇有了解和记录。 见这里 。

它是无法超越的可能的范围,你应该被禁止从使用任何微软BSTR操作功能,编写自己的BSTR操作功能的转换之间某种原因BSTRchar *

作为一种廉价和非常讨厌的黑客,我现在才投了BSTR到一个char *,然后复制每隔字符缓冲区或相似。 然而,这并不包含特殊字符的应付,是一个非常非常讨厌的黑客。 请不要做,除非你能保证在BSTR的人物都是标准的ASCII字符(或不关心,如果他们不),并只是做它快速调试黑客或东西liek说,而不是正确的生产高质量的代码。



文章来源: Convert BSTR to CHAR* and CHAR* to BSTR in C
标签: c com