翻译题,翻译成delphi的代码,转换LPCSTR 为LPWSTR

chenybin 2006-12-13 11:21:44
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);
}
...全文
241 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenybin 2006-12-18
  • 打赏
  • 举报
回复
用数组实现了,谢谢
chenybin 2006-12-14
  • 打赏
  • 举报
回复
谢谢楼上的兄弟
蒋晟 2006-12-14
  • 打赏
  • 举报
回复
function WideStringToString(const ws: WideString; codePage: Word): AnsiString;
var
l: integer;
begin
if ws = ' then
Result := '
else
begin
l := WideCharToMultiByte(codePage,
WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
@ws[1], - 1, nil, 0, nil, nil);
SetLength(Result, l - 1);
if l > 1 then
WideCharToMultiByte(codePage,
WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
@ws[1], - 1, @Result[1], l - 1, nil, nil);
end;
end;

function StringToWideString(const s: AnsiString; codePage: Word): WideString;
var
l: integer;
begin
if s = ' then
Result := '
else
begin
l := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@s[1]), - 1, nil, 0);
SetLength(Result, l - 1);
if l > 1 then
MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@s[1]),
- 1, PWideChar(@Result[1]), l - 1);
end;
end;

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧