【问题标题】:Do I need to free BSTRs populated by _Type::get_FullName我是否需要释放由 Type::get_Full_Name 填充的 BSTR
【发布时间】:2012-12-12 10:03:32
【问题描述】:

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

_TypePtr spType = NULL;
. . . // host the CLR and populate that type
{
    BSTR fullName;
    spType->get_FullName(&fullName);
    wprintf(L"Got type %s\n", fullName);
}

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

【问题讨论】:

  • @WhozCraig 好的,我该如何释放它?
  • 使用SysFreeString()。在你的情况下,一旦完成,调用SysFreeString(fullName);
  • @Mehrdad 我实际上是用 C++ 而不是 C# 做的。
  • 是的,但你还是不能在 C++ 中调用 C# 函数吗?还是在 mscorlib 加载之前?
  • @Mehrdad 如果我在做 C++/CLI。我在这里用纯非托管 C++ 通过 COM 实例化一个新的 CLR 实例,所以我没有那个选项。

标签: c++ bstr clr-hosting


【解决方案1】:

BSTRSysAllocString 动态分配(如果我没记错名字,请检查!)。

有相应的解除分配功能。

只需阅读文档


如果您使用的是 Visual C++ 编译器,并且不打算将代码移植到其他编译器,那么您可以使用与 Visual C++ 捆绑在一起的“智能 BSTR”类。我记不起名字了。但是像_bstr_t 这样的东西。等等,检查文档...好的,在提供名称的索引中输入“_bstr”,我想它是_bstr_t! :-)

通过使用“智能”类,它会为您处理释放。

【讨论】:

猜你喜欢
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 2011-09-06
相关资源
最近更新 更多