我不得不转换BSTR为char *数据类型在C.反正有做到这一点,而无需使用VC ++库或者功能。 该代码必须是纯C.我觉得“comutil.h”已经得到了功能,但它们在C ++我想。
此外,关于SysAllocString功能,可我们用它在C和转换为char *? 请帮忙。
谢谢,sveerap
我不得不转换BSTR为char *数据类型在C.反正有做到这一点,而无需使用VC ++库或者功能。 该代码必须是纯C.我觉得“comutil.h”已经得到了功能,但它们在C ++我想。
此外,关于SysAllocString功能,可我们用它在C和转换为char *? 请帮忙。
谢谢,sveerap
您可以从一个char *去BSTR与SysAllocStringByteLen()。 但这只是如果字符*只包含ASCII字符,没有字符转换发生的安全。 这不会造成问题,将是非常罕见的。
下一跳是的MultiByteToWideChar(),您通常要设置的代码页参数CP_ACP除非您知道该字符串编码的另一种方式。 产生一个宽字符串,然后您可以传递给SysAllocString()来获得BSTR。
周围的其他方法是调用WideCharToMultiByte(),直接传递BSTR会工作,除非它包含嵌入的0个字符。 该转换是有损然而无论如何,提防相当头痛,当你与包含重音字符或其他任何东西,不能在你使用的代码页中表示字符串的工作这可能会导致。
这取决于你如何定义“VC ++库或者功能”。 该BSTR类型是一个很值得VC ++类型。 然而,如果你认为这是一个“窗口”型则是在“窗口”库和您可以使用“视窗”功能BSTR操作功能。 这一切都取决于你在做什么,你正在使用什么编译器,以及其他任何技术限制。 这本来是一个好主意来形容,为什么你不能在这个问题用VC ++库。
事实上,BSTR类型是颇有了解和记录。 见这里 。
它是无法超越的可能的范围,你应该被禁止从使用任何微软BSTR操作功能,编写自己的BSTR操作功能的转换之间某种原因BSTR
和char *
。
作为一种廉价和非常讨厌的黑客,我现在才投了BSTR到一个char *,然后复制每隔字符缓冲区或相似。 然而,这并不包含特殊字符的应付,是一个非常非常讨厌的黑客。 请不要做,除非你能保证在BSTR的人物都是标准的ASCII字符(或不关心,如果他们不),并只是做它快速调试黑客或东西liek说,而不是正确的生产高质量的代码。