c - 在C中将BSTR转换为CHAR *并将CHAR *转换为BSTR

标签 c com

我必须在C中将BSTR转换为CHAR *数据类型。是否仍然可以在不使用VC ++库或函数的情况下执行此操作。代码必须使用纯C语言。我认为'comutil.h'具有函数,但我想它们使用C ++。

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

谢谢,
Sveerap

最佳答案

您可以使用SysAllocStringStringByteLen()从char *转换为BSTR。但这仅在char *仅包含ASCII字符且不进行任何字符转换的情况下才是安全的。不会引起问题的情况很少见。

下一跳是MultiByteToWideChar(),除非您知道该字符串以其他方式编码,否则通常需要将CodePage参数设置为CP_ACP。这将产生一个宽字符串,然后您可以将其传递给SysAllocString()以获取BSTR。

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

关于c - 在C中将BSTR转换为CHAR *并将CHAR *转换为BSTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4508982/

相关文章:

com - 转储 COM 对象公开的接口(interface)

c# - 按值将 C# 对象传递给 COM

c - 在64位计算机上的对齐不是8个字节

c++ - 将函数汇编代码嵌入到结构中

c - C:在数组中创建/覆盖特定空间

c# - 如何正确发布 Outlook MailItem?

c++ - COM:返回字符串的拷贝,还是实际值?

c# - 清理 CommandBar 按钮

c++ - 让 VS 编译器捕获有符号/无符号的赋值?

c - 登录 ISR、sprintf()、printk() 还是其他?