翻译题,翻译成delphi的代码,转换LPCSTR 为LPWSTR
1、#define SAFE_FREESTRING(s) if (s) { DsoMemFree(s); (s) = NULL; }
2、STDAPI_(LPWSTR) ConvertToLPWSTR(LPCSTR pszMbcsString)
3、主要是这个部分
LPCLSID lpMyList = NULL;
int nMyCount = 0;
int nMyLen = 0;
HKEY hkCLSID;
HKEY hkItem;
HKEY hkDocObject;
DWORD dwIndex = 0;
CHAR szName[MAX_PATH+1];
if (RegOpenKeyEx(HKEY_CLASSES_ROOT, "CLSID", 0, KEY_READ|KEY_ENUMERATE_SUB_KEYS, &hkCLSID) == ERROR_SUCCESS)
{
while (RegEnumKey(hkCLSID, dwIndex++, szName, MAX_PATH) == ERROR_SUCCESS)
{
if (RegOpenKeyEx(hkCLSID, szName, 0, KEY_READ, &hkItem) == ERROR_SUCCESS)
{
if ((RegOpenKeyEx(hkItem, "DocObject", 0, KEY_READ, &hkDocObject) != ERROR_SUCCESS))
{
CLSID clsid;
LPWSTR pwszClsid = ConvertToLPWSTR(szName);
if ((pwszClsid) && SUCCEEDED(CLSIDFromString(pwszClsid, &clsid)))
{
if (lpMyList == NULL)
{
nMyCount = 0;
nMyLen = 16;
lpMyList = My CLSID[nMyLen];
}
if (nMyCount == nMyLen)
{
LPCLSID lpOldList = lpMyList;
nMyLen <<= 2;
lpMyList = My CLSID[nMyLen];
memcpy(lpMyList, lpOldList, sizeof(CLSID) * nMyCount);
delete [] lpOldList;
}
lpMyList[nMyCount] = clsid;
nMyCount++;
}
SAFE_FREESTRING(pwszClsid);
RegCloseKey(hkDocObject);
}
RegCloseKey(hkItem);
}
}
RegCloseKey(hkCLSID);
}