|
|
// 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; }
|