自定义TCHAR2BSTRh函数和BSTR内存的释放



 1 inline HRESULT TCHAR2BSTR(TCHAR * szBuf, BSTR * bstrNew)
 2 {
 3     try
 4     {
 5         WCHAR * wszBuf;
 6 #ifndef UNICODE
 7         wszBuf = new WCHAR[512];
 8         MultiByteToWideChar(CP_ACP, 0, szBuf, -1, wszBuf, 512);
 9 #else
10         wszBuf = szBuf;
11 #endif
12
13         bstrNew = ::SysAllocString(wszBuf);
14
15 #ifndef UNICODE
16         delete [] wszBuf;
17 #endif
18
19     }
20     catch (...)
21     {
22         return E_OUTOFMEMORY;
23     }
24
25     return S_OK;
26 }

何时释放BSTR内存请参考

https://msdn.microsoft.com/zh-cn/library/cc485262

 
时间: 2024-08-03 15:20:17

自定义TCHAR2BSTRh函数和BSTR内存的释放的相关文章

C语言中free函数是如何确定要释放多少内存空间的

本文链接:http://www.cnblogs.com/xxNote/p/4009359.html 今天看书的时候看到free函数释放动态申请的内存时只需要把内存块的首地址传过去就行了,显然仅仅依靠首地址是无法确定要释放多少内存的,猜想应该在某处存放着这个内存块的大小,网上搜了搜发现在Linux里面glibc在分配内存的时候会在内存块的地址前面的4个字节出存放内存块的大小,就猜想Windows里面应该也是这样.写了一个小程序测试了下: #include <stdio.h> #include &

拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

 1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: #include<iostream> //如果声明已经定义,边不会生成 class classA { private: int a; int b; public: //拷贝构造的规则,有两种方式实现初始化 //1.一个是通过在后面:a(x),b(y)的方式实现初始化 //2.第二种初始化的方式是直

C++内存未释放的情况

以下例子中,存储了整数123的记亿体空间不能被删除,因为地址丢失了.这些空间已无法再使用. 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int *a = new int(123); 6 cout << *a << endl; 7 // We should write "delete a;" here 8 a = new int(456); 9 cout <<

c++第十二章 -(动态管理内存、动态数组和函数返回动态内存)

1.静态内存,编译时申请,存储在栈,如基本数据类型. 2.动态内存由一些没有名字,只有地址的内存块构成.那些内存块是在程序运行期间动态分配的.它们来自一个标准c++库替你管理的“大池子”(内存池),从内存池申请一些内存需要用new语句,他将根据你提供的数据类型分配一块大小适当的内存.你不必担心内存块的尺寸问题. 3.注意在用完内存块之后,应该用delete语句把它返还内存池.另外作为一种附加的保险措施,在释放内存之后还要把关联的指针置NULL,对空指针进行“解引用”会报错. class Comp

EntityFramework Core 2.0自定义标量函数两种方式

前言 上一节我们讲完原始查询如何防止SQL注入问题同时并提供了几种方式.本节我们继续来讲讲EF Core 2.0中的新特性自定义标量函数. 自定义标量函数两种方式 在EF Core 2.0中我们可以将方法映射到数据库中的标量函数,我们可在LINQ中调用此方法并会被正确翻译成SQL语句,这为编写数据访问层的开发人员提供了一个很棒的功能来创建一个方法并在其上应用DbFunction特性即可.该属性会将静态CLR方法映射到数据库函数,以便可以在LINQ查询中使用此方法.默认情况下,数据库函数中的CLR

js堆栈内存的释放

### JS中的堆栈内存 > 俗称叫做作用域(全局作用域/私有作用域) > - 为js代码提供执行的环境(执行js代码的地方) > - 基本数据类型值是直接存放在栈内存中的 > **堆内存** > 存储引用数据类型值的(相当于一个存储的仓库) > - 对象存储的是键值对 > - 函数存储的是代码字符串 在项目中,我们的内存越少性能越好,我们需要把一些没用的内存处理掉 [堆内存] var o ={};当前对象对应的堆内存被变量o占用着呢,堆内存是无法销毁的. o =

自定义el函数

1.1.1 自定义EL函数(EL调用Java的函数) 第一步:创建一个Java类.方法必须是静态方法. public static String sayHello(String name){ return "Hello " + name; } 第二步:提供一个tld文件.(tld文件标签库文件.放置在WEB-INF 下) 在tld文件中定义: <!-- 自定义EL函数 --> <function> <!-- 函数名 --> <name>s

第十七篇:复制控制( 上 ) --- 自定义复制函数

前言 若要将a对象复制给b对象,编译器应当做何工作?C++初学者也许会直接说” a对象的成员复制给b对象的成员 “.在很多情况下,这种说法正确,事实上C++会给类定义一个默认的复制函数,它所做的工作也正是如此.但,下面问题来了:如果类的成员当中有指针,这种做法还行吗?本文将对这个问题作出实例分析. 一个典型错误示例 下面这个代码示例用来检验前言中所提到的问题: 1 #include <iostream> 2 #include <cstdlib> 3 #include <fst

自定义数组函数

// 自定义数组函数Array.prototype.maxima.//Array.prototype为必须的,maxima为数组名.//调用时arr.maxima()这样调用window.onload = function() { Array.prototype.sum = function(){ for(var sum = i = 0 ; i < this.length; i ++){ sum += parseInt(this[i]); } return sum; }; Array.proto