想在COM中输出一个BSTR数组,该怎么分配这个数组的内存?
IDL中语法如下:
[id(5), helpstring("method GetDataAddress")] HRESULT GetDataAddress([out] long *pRow,[out] long* pCol,[out,size_is(,(*pRow)*(*pCol))] BSTR **ppData);//输出一个BSTR类型的数组在函数中是如下做的:
m_pbstrData=(BSTR*)CoTaskMemAlloc(m_nColCount*m_nRowCount*sizeof(BSTR));奇怪的是这个DLL用REFSVR32注册时客户端调用是正常的但如果用COM+注册,就出错
错误如下:
Unhandled exception in testado.exe(Kernel32.dll):0xe06d7363:Microsoft C++ Exception我想问题出在内存分配上,请问各位高手该如何解决?分不够还可以再加!!
IDL中语法如下:
[id(5), helpstring("method GetDataAddress")] HRESULT GetDataAddress([out] long *pRow,[out] long* pCol,[out,size_is(,(*pRow)*(*pCol))] BSTR **ppData);//输出一个BSTR类型的数组在函数中是如下做的:
m_pbstrData=(BSTR*)CoTaskMemAlloc(m_nColCount*m_nRowCount*sizeof(BSTR));奇怪的是这个DLL用REFSVR32注册时客户端调用是正常的但如果用COM+注册,就出错
错误如下:
Unhandled exception in testado.exe(Kernel32.dll):0xe06d7363:Microsoft C++ Exception我想问题出在内存分配上,请问各位高手该如何解决?分不够还可以再加!!
Allocates a new string and copies the passed string into it.BSTR SysAllocString(
const OLECHAR * sz
);inline void CStatBar::SetText(OLECHAR * sz)
{
SysFreeString(m_bstrMsg); // Free previous string, if any.
m_bstrMsg = SysAllocString(sz);
// Caller should check to see if m_bstrMsg is null after calling this method.
}
用简单的而且在很多地方能被证明是可行的方法最可靠
没有长度信息,对于套间传送必有问题,列集无法
得到内存长度
分配的是一bstr数组,与bstr没关系,不能用SysAllocString数组中的每个才bstr需要那样分配,wait