"Ups" <upendra.desai@gmail.com> wrote in message
news:1155885351.558125.134130@i42g2000cwa.googlegroups.com...
Hi,
I am using the _com_utils::ConvertBSTRToString function to convert a
CComBSTR to char *.
The documentation for this function says that it throws a _com_error
exception in case of error.
I am using this function in my ATL exe server. If I wish to propagate
the error from ConvertBSTRToString to my client, how do I do it.
One of the options I can think of is to do the following in my server
code:
try
{
fp = fopen(ConvertBSTRToString(m_bstrFileName), "r");
}
catch(_com_error &e)
{
return Error(e.Description().copy(), IID_IPacketReader, e.Error());
}
where m_bstrFileName is of type CComBSTR. If I return a new error
You can use the CW2A macro which is more acustomed.
fp = fopen(CW2A(m_bstrFileName), "r");
Beside,s if you don't develdop for Winblows 9x, you can better move now
(which is default on C++ on Vs2005!) to UNICODE.
so this would be sufficient then without all the W to A mess.
fopenw(m_bstrFileName, L"r");
object so that my client can catch it, should I do perform
e.Description().copy() OR just e.Description() in the CComCoClass Error
function? What concerns me is the fact that my BSTR could leak memory.
Secondly, if I do not handle the exception here, would it get
propagated to the client's try...catch automatically. I am under the
impression that for a client to catch a _com_error exception, the
server will need to return a HRESULT with some error code. In this
case, the function does not return a HRESULT.
Any help would be appreciated.
Cheers,
Ups