_com_util::ConvertStringToBSTR 使用时的注意事项

From:http://www.cnblogs.com/nemolog/archive/2006/01/28/323955.aspx

在进行COM编程的时候常常用到VARIANT类型的变量, 其中的字符串分量为bstrVal即双字节的BSTR, 如果需要将其转换为字符串STRING我以前使用强制类型转换:
    (const char*)bsVal;
在看了潘爱民老师的<<COM编程原理>>偶尔发现如下函数(例子摘自MSDN)

   //compile options needed: /Gr or /Gz
   #include <comutil.h>
   int main()
   {
       char sz[]="hello";
       _bstr_t b;
       b = _com_util::ConvertStringToBSTR(sz);
       char * p = _com_util::ConvertBSTRToString(b);
       return 1;
   }


注意: 上述代码编译时候出现如下错误

error LNK2001: unresolved external symbol "char * __fastcall
   _com_util::ConvertBSTRToString(unsigned short *)"
   (?ConvertBSTRToString@_com_util@@YIPADPAG@Z)

   error LNK2001: unresolved external symbol "unsigned short * __fastcall
   _com_util::ConvertStringToBS
   TR(char const *)" (?ConvertStringToBSTR@_com_util@@YIPAGPBD@Z)

解决: 在Link页加入comsupp.lib就可以了, 不过我的程序编译的时候没有上述错误, 但是在同事的机器上出现了.

我的用法 -- _com_util::ConvertStringToBSTR();

    char*   pTemp;
    CString csTemp;

    pTemp = _com_util::ConvertBSTRToString(bsVal);
    csTemp = pTemp;
    delete pTemp;
    pTemp = NULL;

    // 这是我们公司的一位高手的最安全的用法
    // 对于ConvertStringToBSTR不需要

 

以下是网友回复的内容:

#1楼 回复 引用 查看 

无意中进到你的Blog 发现一个问题,其实ConvertStringToBSTR 也是需要释放内存空间的
Example
// ConvertStringToBSTR.cpp
#include <comutil.h>
#include <stdio.h>
#pragma comment(lib, "comsupp.lib")
#pragma comment(lib, "kernel32.lib")
int main()
{
char* lpszText = "Test";
printf("char * text: %s\n", lpszText);
BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);
wprintf(L"BSTR text: %s\n", bstrText);
SysFreeString(bstrText);
}
代码来自MSDN

 

#2楼 回复 引用 查看
引用#1楼:“无意中进到你的Blog 发现一个问题,其实ConvertStringToBSTR 也是需要释放内存空间的” 

是的,否则同样有内存泄漏的问题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值