Calling application
-------------------
HRESULT CRegWriter::SetValue(LPCTSTR path, LPCTSTR var, DWORD dwType, const BYTE *lpData,DWORD cbData)
{
if(m_object){
CComSafeArrayBound bound[1];
bound[0].SetCount(cbData);
bound[0].SetLowerBound(0);
CComSafeArray<BYTE> sar(bound);
for(unsigned int i = 0; i < cbData; i++)
{
sar.SetAt(i, lpData[i]);
}
HRESULT hr = m_object->RgWriteValue(_bstr_t(path), _bstr_t(var), dwType, sar);
return hr;
}
Target application
------------------
STDMETHODIMP MyRegClass::RgWriteValue(BSTR path, BSTR var, DWORD dwType, SAFEARRAY *indata)
{
if(!SafePath(path)){
return E_FAIL;
}
CComSafeArray<BYTE> sar;
sar.Attach(indata);
int size = sar.GetUpperBound() +1;
BYTE* lpData = new BYTE[size];
for(int i = 0; i < size; i++)
{
lpData[i] = sar.GetAt(i);
}
HKEY hk = NULL;
DWORD err = RegCreateKeyEx(HKEY_LOCAL_MACHINE, path, 0,NULL,REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE, NULL, &hk, NULL);
if(err != ERROR_SUCCESS ){
return err;
}
err = RegSetValueEx(hk, var , 0, dwType, lpData, size);
delete lpData;
return err;
}
Do more with
Premium Content
You need an Expert Office subscription to comment.Start Free Trial