如何最好地将 CString 转换为 BSTR 以将其作为“in”参数传递到 COM 方法中?

2023-11-25

我需要转换一个CString实例到正确分配的BSTR并通过它BSTR转换为 COM 方法。为了让代码能够针对 ANSI 和 Unicode 进行相同的编译和工作,我使用CString::AllocSysString()转换任何格式CString到 Unicode BSTR。

由于没有人拥有返回的 BSTR,我需要处理它并在调用完成后以最安全的方式释放它,并使用尽可能少的代码。

目前我使用ATL::CComBSTR对于生命周期管理:

 ATL::CComBSTR converted;
 converted.Attach( sourceString.AllocSysString() ); //simply attaches to BSTR, doesn't reallocate it
 interface->CallMethod( converted );

我不喜欢这里的是我需要两个单独的语句来构建ATL::CComBSTR绑定到转换结果。

有更好的方法来完成同样的任务吗?


CComBSTR两者都有重载的构造函数char* and wchar_t*,这会调用SysAllocString()代表你。因此,代码片段中的显式分配实际上是不必要的。以下内容也同样有效:

ATL::CComBSTR converted = sourceString;
interface->CallMethod(converted);

此外,如果您不需要使用转换后的BSTR在代码的其他地方,您可以在方法调用中就地执行对象构造,如下所示:

interface->CallMethod(ATL::CComBSTR(sourceString));

这同样适用于_bstr_t类,可以用来代替CComBSTR如果您不想依赖 ATL。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何最好地将 CString 转换为 BSTR 以将其作为“in”参数传递到 COM 方法中? 的相关文章

  • os.uname() 函数在 Windows 中不起作用

    当我在 WSL2 Ubuntu 20 04 中用 Python 编写以下代码时 gt gt gt import os gt gt gt os uname 输出是 posix uname result sysname Linux nodena
  • Visual Studio 2010 中的 pthread(POSIX 线程)

    我从互联网上找到了一个 Pthread 程序 我想在 Visual Studio 2010 中运行它 但我不知道如何在 Visual Studio 中使用 pthread 以下是我找到的程序 include
  • 无法在 rstudio 中启动 pandoc

    我不能再使用 knitr 无论是 html 还是 pdf 每次我下订单 knit 时都会得到这个结果 Error in system paste shQuote pandoc path version intern TRUE CreateP
  • 为什么 Windows 使用 CR LF?

    我了解两者之间的区别 因此没有必要深入讨论 但我只是想知道 Windows 同时使用 CR 和 LF 来指示换行符背后的原因是什么 看起来 Linux 方法 仅使用 LF 更有意义 节省空间 并且更容易解析 Historically whe
  • 包含带空格的可执行路径的环境变量是否也应包含必要的引号?

    定义环境变量时 对我来说 在 Windows 上 也许有一个更通用的准则 set MY TOOL C DevTools bin mytool exe 如果该工具位于带有空格的路径上 set MY TOOL C Program Files x
  • $ 之间的区别?和 PowerShell 中的 $LastExitCode

    在 PowerShell 中 有什么区别 and LastExitCode I read 关于自动变量 http technet microsoft com en us library dd347675 aspx 它说 Contains t
  • 使用 docker toolbox 时无法通过主机(windows)IP 访问 Docker VM 上的 tomcat 应用程序

    我正在使用 docker 工具箱在 Windows 系统上运行 docker 我使用命令运行 tomcat 容器docker run it rm p 8888 8080 tomcat 8 0 根据文档我应该能够使用访问tomcathttp
  • 将 HRESULT 转换为可读消息

    任何人都可以提供一些有关如何以编程方式翻译 HRESULT 的信息 http en wikipedia org wiki HRESULT http en wikipedia org wiki HRESULT 值到人类可读的消息 我知道实用程
  • 如何获取与Windows主题相关的图标?

    如何获取Windows中某个控件的图标 更具体地说 我想从 ListView 标题中获取排序箭头图标 我尝试使用以下方法来获取它 HRESULT GetSortArrowBmp HWND hwnd HEADERSORTARROWSTATES
  • 完整的端到端教程 C++ 与 MYSQL Server 5.5

    我花了几个小时寻找关于如何使用 MYSQL Server 5 5 进行查询的完整端到端教程 这是使用 Visual Studio 2010 Express 的 Visual C 控制台应用程序 有人看过这个设置的实际工作教程吗 当所有内容都
  • 子类化 QVector

    这是我的问题 我想对 QVector 进行子类化 以便添加一些特定于我的上下文的函数 天真的方法是 class ClassVector public QVector
  • Windows 10:如何防止切换或关闭应用程序

    我正在为 Windows 10 设备开发一个应用程序 该设备将在公共场所暴露给用户 并且其硬件按钮将无法访问 如何防止用户使用触摸屏手势关闭我的应用程序 使用分配的访问权限设置您的应用程序 http www winbeta org news
  • Pip 损坏,给出 PermissionError: [WinError 32]

    我安装了python certifi win32模块 我太忙于解决这个问题 以至于我什至不记得我最初安装它的原因 不过 在安装之后 当我运行 pip 时 我开始收到此错误 下面是扩展错误代码 PermissionError WinError
  • crt0 是否加载 msvcrt.dll?

    我想弄清楚标准 C 函数是什么样的printf 在 Windows 环境下加载到内存中 我知道crt0 obj准备堆栈 调用int main int argc char argv 然后使用 main 返回的退出代码退出进程 我还听说 C 标
  • 在 Windows 中更改文件所有者

    Windows下有没有类似Linux的APIchown http google com search q man 2 chown 摘自这里 http www perlmonks org node id 70562 http www perl
  • 0x1A 上的行读取阻塞

    我有以下文件 abcde kwakwa lt 0x1A gt line3 linllll Where lt 0x1A gt 表示十六进制值为 0x1A 的字节 当尝试在 Python 中读取此文件时 for line in open t t
  • 如何使用 C# 更改 Windows 配色方案?

    如何使用 C 以编程方式更改配色方案 我想将配色方案更改为 Windows Vista Basic 或 Windows 7 Basic 我怎样才能做到这一点 谢谢 尼基尔 您可以使用 SetSystemVisualStyle 方法更改系统的
  • 将音频从 PC 传输到智能手机?

    2016 年圣诞节 我和我爸爸想用灯光和灯光为我们的社区举办一场灯光秀music We have the lights set up but the music is a problem We don t want to put huge
  • 从 C# 访问 COM vtable

    C 中有没有办法访问 COM 对象的虚拟方法表以获取函数的地址 经过大量搜索和拼凑不同的部分解决方案后 我弄清楚了如何做到这一点 首先 您需要为您尝试访问的对象定义 COM 组件类 ComImport Guid InterfaceType
  • 用于打开大(巨型、巨大、大)文本文件的文本编辑器[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • 将文件从 MVC 5 下载到 Angular 2

    我有 C 后端和 ASP Net MVC 经验 现在我正在第一次尝试 Angular 2 这需要时间 但我喜欢其中的大部分 现在我陷入了简单的文件下载 我已阅读在 Stackoverflow 上找到的所有示例 但我的示例仍然无法运行 在服务
  • .bashrc 语法错误:意外的文件结尾

    我收到意外的文件结束错误 我不太确定如何解决它 Source global definitions if f etc bashrc then etc bashrc fi User specific aliases and functions
  • 如何对 List 进行排序以首先列出目录并按目录对文件进行分组?

    为了获取指定目录中包含的所有文件并根据某些扩展名 我使用以下方法listFiles班级的FileUtils from Apache 公共 IO库 如以下代码示例所示 ArrayList
  • Kendo Grid 滚动到选定的行

    我希望能够调用一个将 Kendo 网格滚动到所选行的函数 我已经尝试过一些方法 但没有一个有效 例如我尝试过这个 var grid Grid data kendoGrid content k grid content content scr
  • 从 SOAP 请求中删除命名空间

    我已导入 WSDL 并使用它来发送 SOAP 请求 它看起来像这样
  • 如何在 GTK/QT/Clutter 应用程序中使用 ZeroMQ?

    In gtk应用程序的所有执行都发生在gtk main功能 其他图形框架作品也有类似的事件循环 例如app exec for QT and clutter main for Clutter 然而ZeroMQ基于以下假设 while 1 它被
  • 在 Django 中提供动态生成的 ZIP 档案

    如何在 Django 中为用户提供动态生成的 ZIP 存档 我正在创建一个网站 用户可以在其中选择可用书籍的任意组合并将其下载为 ZIP 存档 我担心为每个请求生成这样的档案会使我的服务器速度变慢 我还听说 Django 目前没有一个很好的
  • 将空值替换为行 SQL Server 查询中以前的可用值

    我正在寻找构建一个查询来用以前的可用值替换空值 有人可以帮忙吗 这是当前看起来像的表 11 30 2015 ID1 CLassName 1 NULL ID1 CLassName 2 NULL ID1 CLassName 3 NULL ID1
  • paypal api:无需送货地址即可立即付款

    为这个问题我花了好几个小时把头发扯下来 我找不到办法立即付款通过 paypal api 无需指定送货地址 我出售的门票是通过电子邮件发送的 无需运费 有信息指定您必须创建 网络体验配置文件 但是 一是我不知道如何将 WebProfile 传
  • C++ 中不稳定错误的最常见原因?

    我目前正在做一个大项目 大部分时间都花在调试上 虽然调试是一个正常的过程 但也存在一些不稳定的错误 这些错误是开发人员最大的痛苦 该程序有时不起作用 有时它起作用 但您对此无能为力 针对这些错误可以采取什么措施 最常见的调试工具 交互式调试
  • 尝试将核心类(java.* 或 javax.*)包含在核心库以外的内容中

    嗨 我是新安卓 我正在处理示例 但在运行 HelloGridView 应用程序时出现错误 Eclipse 给出以下错误 有人遇到过以下错误吗 谢谢 2010 12 06 14 38 16 HelloGridView 处理 javax net
  • 如何在 Spark 中访问广播的 DataFrame

    我创建了两个数据框 它们来自 Hive 表 PC ITM 和 ITEM SELL 并且大小很大 我正在使用它们 经常在SQL查询中通过注册为表 但是由于这些数据很大 所以需要很多时间 以获得查询结果 所以我将它们保存为镶木地板文件 然后读取
  • “无法找到与应用程序标识符''匹配的有效配置文件”错误

    我正在开发一个应用程序 我想将其安装到一些 iPad 而不是 App Store 上 我购买了开发者许可证 并在 Xcode 上添加了规定 现在 当我尝试为已连接到计算机的 iPad 构建应用程序时 出现错误 A valid provisi
  • Websphere 不信任证书

    我有一个 Web 应用程序 它调用通过 SSL 保护的 SOAP Web 服务 https zzzzzzzzzzzz xxxxx 服务器发送两个证书 根和叶 因此我使用以下属性导入两个证书 com ibm websphere ssl ret
  • 不带 new 的动态数组 (C++)

    我是 C 新手 这是一个非常基本的问题 在C 中只有两种创建动态数组的方法 在书上看到的 如有错误请指正 使用内存分配new运算符或malloc 函数取自C 声明数组时int array size 方括号 must have a const
  • java applet 策略文件放置在哪里?

    我正在开发一个人工智能项目 这是一个逻辑游戏 目标是两个用户连接到网络上的服务器 充当管理员 然后开始一一玩 为了创建连接 我有一个服务器代码 它只是在 localhost 8000 上侦听 并在客户端到达时为其分配团队值 连接后 客户端在
  • CSS - 如何从div溢出到屏幕全宽

    我有一个包含 DIV 我将其用作响应式网格的一部分 它扩展到我允许的最大宽度 即 1280px 然后在大型设备上出现边距 这是我的 CSS 一些 Less container margin left auto margin right au
  • XML 中的“xmlns”是什么意思?

    我在 XML 文件中看到以下行 xmlns android http schemas android com apk res android 我也见过xmlns在我遇到的许多其他 XML 文件中 它是什么 它的意思是XML命名空间 基本上
  • 使用 JavaScript 对 CSS3 变换的值进行动画处理是否可以排除硬件加速?

    您可以通过设置动画持续时间并设置 CSS3 变换的初始值和最终值来利用硬件加速动画 如果您不设置动画持续时间并使用关键帧 而是直接使用 JavaScript 对所需 CSS3 转换的值进行动画处理 会怎样 您是否仍会利用硬件加速 或者是否会
  • 如何最好地将 CString 转换为 BSTR 以将其作为“in”参数传递到 COM 方法中?

    我需要转换一个CString实例到正确分配的BSTR并通过它BSTR转换为 COM 方法 为了让代码能够针对 ANSI 和 Unicode 进行相同的编译和工作 我使用CString AllocSysString 转换任何格式CString