如何使用 C 将 BSTR 转换为字符串

How to convert BSTR to String with C

我正在用 C 语言开发一个函数来提取 UI 元素的 class 名称。函数 returns BSTR,我想使用 Py_BuildValue.

将此值传递给 python
BSTR element_class;

hr = IUIAutomationElement_get_CurrentClassName(element,element_class);
if(SUCCEEDED(hr)){
  arglist = Py_BuildValue("(z)", element_class);
}

if(element_class != NULL)
      free(element_class); ????

我在编译后收到以下警告:

'function': 'BSTR *' differs in levels of indirection from 'BSTR'

我想了解此警告以及如何正确执行。另外,我想释放这个 element_class 的内存,但我也不知道该怎么做。非常感谢您的帮助。

编辑 1: 我实现了删除警告,只需在 element_class 中添加 $。但是,当我使用 Py_BuildValue 时,我得到的只是第一个字母,而不是 class.

的全名

将评论中包含的所有提示放在一起,我认为这就是您应该使用的。

BSTR element_class;

hr = IUIAutomationElement_get_CurrentClassName(element, &element_class);
if(SUCCEEDED(hr)){
  arglist = Py_BuildValue("(u)", element_class);
}

if(element_class != NULL)
      SysFreeString(element_class);