You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.8 KiB
73 lines
1.8 KiB
// srvcutil.cpp
|
|
|
|
#include "precomp.h"
|
|
|
|
/* B S T R _ T O _ L P T S T R */
|
|
/*-------------------------------------------------------------------------
|
|
%%Function: BSTR_to_LPTSTR
|
|
|
|
-------------------------------------------------------------------------*/
|
|
HRESULT BSTR_to_LPTSTR(LPTSTR *ppsz, BSTR bstr)
|
|
{
|
|
#ifndef UNICODE
|
|
// compute the length of the required BSTR
|
|
int cch = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)bstr, -1, NULL, 0, NULL, NULL);
|
|
if (cch <= 0)
|
|
{
|
|
ERROR_OUT(("WideCharToMultiByte failed"));
|
|
return E_FAIL;
|
|
}
|
|
|
|
// cch is the number of BYTES required, including the null terminator
|
|
*ppsz = (LPTSTR) new char[cch];
|
|
if (*ppsz == NULL)
|
|
{
|
|
ERROR_OUT(("WideCharToMultiByte out of memory"));
|
|
return E_OUTOFMEMORY;
|
|
}
|
|
|
|
WideCharToMultiByte(CP_ACP, 0, (LPWSTR)bstr, -1, *ppsz, cch, NULL, NULL);
|
|
return S_OK;
|
|
#else
|
|
return E_NOTIMPL;
|
|
#endif // UNICODE
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Connection Point Helpers
|
|
|
|
HRESULT NmAdvise(IUnknown* pUnkCP, IUnknown* pUnk, const IID& iid, LPDWORD pdw)
|
|
{
|
|
IConnectionPointContainer *pCPC;
|
|
IConnectionPoint *pCP;
|
|
HRESULT hRes = pUnkCP->QueryInterface(IID_IConnectionPointContainer, (void**)&pCPC);
|
|
if (SUCCEEDED(hRes))
|
|
{
|
|
hRes = pCPC->FindConnectionPoint(iid, &pCP);
|
|
pCPC->Release();
|
|
}
|
|
if (SUCCEEDED(hRes))
|
|
{
|
|
hRes = pCP->Advise(pUnk, pdw);
|
|
pCP->Release();
|
|
}
|
|
return hRes;
|
|
}
|
|
|
|
HRESULT NmUnadvise(IUnknown* pUnkCP, const IID& iid, DWORD dw)
|
|
{
|
|
IConnectionPointContainer *pCPC;
|
|
IConnectionPoint *pCP;
|
|
HRESULT hRes = pUnkCP->QueryInterface(IID_IConnectionPointContainer, (void**)&pCPC);
|
|
if (SUCCEEDED(hRes))
|
|
{
|
|
hRes = pCPC->FindConnectionPoint(iid, &pCP);
|
|
pCPC->Release();
|
|
}
|
|
if (SUCCEEDED(hRes))
|
|
{
|
|
hRes = pCP->Unadvise(dw);
|
|
pCP->Release();
|
|
}
|
|
return hRes;
|
|
}
|