__forceinline void * __cdecl _heap_alloc (size_t size){
#ifndef _WIN64
void *pvReturn;
#endif /* _WIN64 */ if (_crtheap == 0) {
_FF_MSGBANNER(); /* write run-time error banner */
_NMSG_WRITE(_RT_CRT_NOTINIT); /* write message */
__crtExitProcess(255); /* normally _exit(255) */
}#ifdef _WIN64
return HeapAlloc(_crtheap, 0, size ? size : 1);--》每次到这里都出错。
#else /* _WIN64 */
if (__active_heap == __SYSTEM_HEAP) {
return ;
} else
if ( __active_heap == __V6_HEAP ) {
if (pvReturn = V6_HeapAlloc(size)) {
return pvReturn;
}
}
#ifdef CRTDLL
else if ( __active_heap == __V5_HEAP )
{
if (pvReturn = V5_HeapAlloc(size)) {
return pvReturn;
}
}
#endif /* CRTDLL */ if (size == 0)
size = 1; size = (size + BYTES_PER_PARA - 1) & ~(BYTES_PER_PARA - 1); return HeapAlloc(_crtheap, 0, size);#endif /* _WIN64 */
}
我是调用的COM的一个接口函数,获取数据,返回的是_bstr_t类型。
我刚才参加了一下:http://blog.csdn.net/lsaturn/archive/2007/03/08/1523770.aspx
但还是不是很懂,我该怎么操作啊?
#ifndef _WIN64
void *pvReturn;
#endif /* _WIN64 */ if (_crtheap == 0) {
_FF_MSGBANNER(); /* write run-time error banner */
_NMSG_WRITE(_RT_CRT_NOTINIT); /* write message */
__crtExitProcess(255); /* normally _exit(255) */
}#ifdef _WIN64
return HeapAlloc(_crtheap, 0, size ? size : 1);--》每次到这里都出错。
#else /* _WIN64 */
if (__active_heap == __SYSTEM_HEAP) {
return ;
} else
if ( __active_heap == __V6_HEAP ) {
if (pvReturn = V6_HeapAlloc(size)) {
return pvReturn;
}
}
#ifdef CRTDLL
else if ( __active_heap == __V5_HEAP )
{
if (pvReturn = V5_HeapAlloc(size)) {
return pvReturn;
}
}
#endif /* CRTDLL */ if (size == 0)
size = 1; size = (size + BYTES_PER_PARA - 1) & ~(BYTES_PER_PARA - 1); return HeapAlloc(_crtheap, 0, size);#endif /* _WIN64 */
}
我是调用的COM的一个接口函数,获取数据,返回的是_bstr_t类型。
我刚才参加了一下:http://blog.csdn.net/lsaturn/archive/2007/03/08/1523770.aspx
但还是不是很懂,我该怎么操作啊?
至于COM中_bstr_t类型实际上是对SysAllocString、SysFreeString的封装。
这两套函数都可以跨Dll销毁内存。
我那个COM是封装了的,供应商提供的。不知道里面怎么实现的。
当我定义一个_bstr_t bstr,并用SysAllocString(_T(""));初始化后,再用
bstr = 函数,去调用。这样好像比刚才好了些,但是,还是出错。
要么就是你没按供应商的要求调用他的函数,要么是他的函数写的有问题。