问题标签 [bstr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1866 浏览

c++ - 为什么选择 BSTR 以及如何将其转换为 QString?

我正在使用函数返回 BSTR 的 Microsoft Kinect SDK。我需要得到一个 QString 或 std::string。

这是我尝试过的:

使用此解决方案,程序崩溃。使用注释掉的行,我得到“未解析的外部符号 SysStringLen”。

SysStringLen 是要走的路,但我需要添加一些额外的库(API 不会已经包含它)还是有其他解决方案?


附加问题:微软为什么要这样做?我是说:

这样的事情背后的原因是什么?即使他们发现在内部使用它是有益的,他们难道不能在 API 中使用普通的 char 数组或 std::(w)string 来让其他人的生活更轻松吗?

0 投票
1 回答
721 浏览

c++ - WIA 2.0 - IWiaDevMgr2::GetImgDlg() - 如何声明/初始化 ppbstrFilePaths 参数

我正在尝试在我的 VS2012 C++ 库中实现一些 WIA 2.0 代码,并且遇到了IWiaDevMgr2::GetImageDlg调用的问题,特别是 ppbstrFilePaths 参数。我不太确定如何声明/初始化它。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa359932(v=vs.85).aspx的文档中:

ppbstrFilePaths [in] 类型 - BSTR**

指向已扫描文件的路径数组的指针的地址。在调用 IWiaDevMgr2::GetImageDlg 之前,将指针初始化为指向大小为零 (0) 的数组。见备注。

我已经尝试了各种不同的声明方式,但都没有成功,例如:

我也尝试过类似的事情:

谁能指出我声明和初始化此 BSTR ** 的正确方向?我不是一个大的 C++ 开发人员,在这一点上几乎是在猜测。

0 投票
3 回答
1155 浏览

c++ - C++ stl 映射:BSTR 的问题

我在代码<BSTR,struct>bstr 中使用映射作为键并构造值。

这会起作用还是我必须重新定义一些东西?

我没有看到编译问题,我也可以添加元素。但是,map.find()不起作用。即使元素存在,它也总是返回map.end()(未找到元素)。

我做了一个临时的解决方法如下 - 通过从map.begin()to循环map.end()并为每个元素执行 lstrcmpW 。这似乎有效,但不要认为这太有效了。

关于可能出错的任何建议/提示?可以BSTR用作地图的键吗?我知道地图不支持某些非本机数据类型 - 结构或类......你需要为此定义一个<运算符。

0 投票
1 回答
3255 浏览

char - _bstr_t 到 char*,惊人的结果

第一的:

第二:

它们是相同的,但第一个条件会导致代码不可读

为什么?

0 投票
1 回答
274 浏览

c# - 尝试从 COM 组件传递 BSTR* 时 C# 中的 MarshlDirectiveException

如果我用这样的东西调用我的 COM 方法

我收到上面提到的错误。被调用的方法是这样的

只要我不为 BSTR* 分配一些值,它就可以正常工作。

编辑:IDL 描述

EDIT2:只要我只传递 1 个像 *returnme = "T" 这样的字符,它就可以正常工作。但是当它需要是一个它抛出的字符串时,即使我将一个指针分配给一个字符串,我也会得到一个错误。

0 投票
1 回答
153 浏览

c++ - 我是否需要释放由 _Type::get_FullName 填充的 BSTR

我有一些看起来像这样的代码:

我需要释放那个 bstr 吗?如何释放它SysFreeString()?如果不是为什么?

0 投票
2 回答
3827 浏览

c++ - 带有 VARIANT / bstrVal 代码的 C++ 泄漏

泄漏检查器告诉我,在以下代码中分配的内存存在内存泄漏:

里面的“clsObj”是一个IWbemClassObject,它是一个微软的WMI 接口。

分配泄漏内存的特定行是“clsObj->Get”行。然后泄漏检查器报告泄漏本身的更具体的代码(即在分配泄漏内存时在堆栈跟踪中进一步),我没有源代码:

因此,VARIANT vVal 中的底层 BSTR 似乎正在泄漏。但我正在做 VariantClear ......我还需要做其他事情吗?

也许我在 wstring 构造函数中泄漏了它?但如果是这样,我不明白。我认为 bstrVal 本质上只是归结为一个 char 指针(或 wchar 或其他);wstring 构造函数应该只是从该地址复制,就好像它是任何其他指针一样,对吗?

这不像 wstring 构造函数负责清理最初由 vVal.bstrVal 指向的内存,就好像它正在对某个引用计数的 COM 对象执行 Detach() 一样,是吗?

万一这很重要,这是在 Visual C++ 6 中。

0 投票
1 回答
1594 浏览

c++ - 我可以在 Windows 上使用 _bstr_t 类在多字节和 Unicode 之间进行转换吗?(C++)

BSTR这种奇怪的 Windows 数据类型是否具有一些特定用途,例如 COM 函数。根据 MSDN,它包含一个WCHAR字符串和一些其他内容,例如长度描述符。Windows 也很好地为我们提供了封装的_bstr_t BSTR;它负责分配和解除分配,并为您提供一些额外的功能。它有四个构造函数,包括一个接受 achar*和一个接受a 的构造函数wchar_t*。MSDN对前者的描述: “通过调用来构造一个对象,创建一个新对象,然后封装它。这个构造函数首先进行多字节到Unicode的转换。”_bstr_tSysAllocStringBSTR

它还具有可以提取指向字符串的指针的运算符,如、 和中的任何一个char*,我很确定这些都是以空值结尾的,这很酷。const char*wchar_t*

我花了一些时间阅读如何在多字节和 Unicode 之间进行转换,并且我已经看到很多关于如何使用mbstowcs和的讨论,以及由于编码可能不同,以及wcstomb如何更好,等等等等。这一切似乎都让人头疼,所以我想知道我是否可以构造 a并使用操作来访问字符串,这将是......更少的代码行:MultiByteToWideCharWideCharToMultiByte_bstr_t

我想我对此的直观回答是我们不知道 Windows 在幕后做什么,所以如果我在使用mbstowcs/时遇到问题wcstomb(我想我的意思是mbstowcs_s/ wcstomb_s)而不是MultiByteToWideChar/ WideCharToMultiByte,我不应该冒险,因为它是Windows 可能使用这些。(几乎可以肯定不会使用后者,因为我没有在此处指定“代码页”,不管是什么。)老实说,我还不确定我是否认为mbstowcs_sandwcstomb_s功能可以满足我的目的,因为我不确实掌握了所有不同的编码和东西,但这是一个完全不同的问题,它似乎在整个互联网上都得到了解决。

Sooooo,除了潜在的担忧之外,这样做有什么问题吗?

0 投票
2 回答
2370 浏览

c++ - 将 BSTR 转换为 char * 的问题

我们有一个使用 WinHttp.WinHttpRequest.5.1 调用第三方 Web 服务的旧 C++ 应用程序。

我不会列出调用序列的所有细节,因为我认为它与问题无关,但我们通过调用结束hr = pIWinHttpRequest->get_ResponseText(&bstrResponse);,其中bstrResponse是 BSTR 类型。

调用代码不适用于 BSTR,它适用于标准 C/C++ char *,因此代码将 BSTR 转换为 a char *

对于我们使用此代码访问的所有先前的 Web 服务,这已经奏效了。但对于这个新的,它不是。

我们返回的数据应该是 XML,但是对于这个 web 服务,看起来我们遇到了一些字符代码转换问题。我们得到的字符串以;"?&lt;?xml version="1.0" encoding="utf-8"?&gt;..."

?注意开头的额外内容。在调试器中遍历此内容时,我们在的显示值bstrResponse中看不到它,在 的显示值中b也看不到它,但在 的显示值中确实看到了它c

关于可能发生什么的任何想法?

已编辑

我知道BSTR是多字节类型,但是这个字符串中的所有字符都是纯ASCII,调用这个函数的代码没有一个可以处理多字节字符。浏览网页,我看到经常推荐这种特定机制,但在这种情况下,它不起作用。

我需要将此字符串从 BSTR 转换为单字节字符数组。即使这意味着去除无法转换的多字节字符。

0 投票
1 回答
377 浏览

c++ - MSXML 方法是否获取其 BSTR 参数的内存所有权?

MSXML 方法是否获取其 BSTR 参数的内存所有权?

例如:loadgetElementsByTagNameselectSingleNode

我问这个是因为我看到代码只是调用CString'sAllocSysString()并将其传递给 MSXML 方法而不SysFreeString()随后调用。

编辑:
快速修复我看到的代码_bstr_t https ://stackoverflow.com/a/14471409/109747 (我的帖子)