看了以下的一段代码,不解,请问COM高手.
BSTR bstrOS;
hr = pISimple01->GetOSVersion(&bstrOS);
.......
char *pszOS;
pszOS = _com_util::ConvertBSTRToString(bstrOS);
printf("The OS is %s\n", pszOS);
SysFreeString(bstrOS);
delete pszOS;
_com_util的二个转换函数是不是动态申请了内存,不能调入到里面去看(晕)
delete pszOS可以吗,好像只删除一个字节,平常我们都是用
char *pNew = new char[NEWLEN * sizeof(char));
delete []pNew;
如果是动态分配内存的话,应该有说明,并且说明使用什么函数释放内存。如果可以用delete释放内存的话,应该使用delete []pszOS;形式释放内存。
是分配了的,delete错
Example
// ConvertBSTRToString.cpp
#include <comutil.h>
#include <stdio.h>
#pragma comment(lib, "comsupp.lib")
int main()
{
BSTR bstrText = ::SysAllocString(L"Test");
wprintf(L"BSTR text: %s\n", bstrText);
char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);
printf("char * text: %s\n", lpszText2);
SysFreeString(bstrText);
delete[] lpszText2;
}
这段是MSDN上的
ConvertBSTRToString 确实申请了需要客户来释放的内存。因为BSTR是Basice字符串对象,所以用delete 就可以释放。楼上的老兄说那段代码来自msdn.鉴于msdn的权威性。可以用delete[]一试。
也可以使用
free(lpszText2)释放
<Effective C++> 讲的很精辟的:)