oledlg: Use wide strings, fix buffers size.
This commit is contained in:
parent
0f6e826fe0
commit
e3b4ebebf4
|
@ -4,7 +4,7 @@ SRCDIR = @srcdir@
|
||||||
VPATH = @srcdir@
|
VPATH = @srcdir@
|
||||||
MODULE = oledlg.dll
|
MODULE = oledlg.dll
|
||||||
IMPORTLIB = liboledlg.$(IMPLIBEXT)
|
IMPORTLIB = liboledlg.$(IMPLIBEXT)
|
||||||
IMPORTS = ole32 comdlg32 user32 advapi32 kernel32 ntdll
|
IMPORTS = ole32 comdlg32 user32 advapi32 kernel32
|
||||||
|
|
||||||
C_SRCS = \
|
C_SRCS = \
|
||||||
insobjdlg.c \
|
insobjdlg.c \
|
||||||
|
|
|
@ -332,38 +332,39 @@ static void UIINSERTOBJECTDLG_SelectCreateFromFile(InsertObjectDlgInfo* pdlgInfo
|
||||||
*/
|
*/
|
||||||
static BOOL UIINSERTOBJECTDLG_PopulateObjectTypes(InsertObjectDlgInfo* pdlgInfo)
|
static BOOL UIINSERTOBJECTDLG_PopulateObjectTypes(InsertObjectDlgInfo* pdlgInfo)
|
||||||
{
|
{
|
||||||
|
static const WCHAR szClsid[] = {'C','L','S','I','D',0};
|
||||||
|
static const WCHAR szInsertable[] = {'I','n','s','e','r','t','a','b','l','e',0};
|
||||||
|
static const WCHAR szNotInsertable[] = {'N','o','t','I','n','s','e','r','t','a','b','l','e',0};
|
||||||
DWORD i;
|
DWORD i;
|
||||||
LONG len;
|
LONG len;
|
||||||
HKEY hkclsids;
|
HKEY hkclsids;
|
||||||
HKEY hkey;
|
HKEY hkey;
|
||||||
CLSID clsid;
|
CLSID clsid;
|
||||||
HRESULT ret;
|
HRESULT ret;
|
||||||
CHAR szclsid[128];
|
WCHAR keydesc[MAX_PATH];
|
||||||
CHAR keydesc[MAX_PATH];
|
WCHAR keyname[MAX_PATH];
|
||||||
CHAR keyname[MAX_PATH];
|
WCHAR szclsid[128];
|
||||||
WCHAR wszclsid[128];
|
|
||||||
DWORD index = 0;
|
DWORD index = 0;
|
||||||
|
|
||||||
UIINSERTOBJECTDLG_FreeObjectTypes(pdlgInfo);
|
UIINSERTOBJECTDLG_FreeObjectTypes(pdlgInfo);
|
||||||
|
|
||||||
RegOpenKeyExA(HKEY_CLASSES_ROOT, "CLSID", 0, KEY_READ, &hkclsids);
|
RegOpenKeyExW(HKEY_CLASSES_ROOT, szClsid, 0, KEY_READ, &hkclsids);
|
||||||
|
|
||||||
while (ERROR_SUCCESS == (ret = RegEnumKeyA(hkclsids, index, szclsid, MAX_PATH)))
|
while (ERROR_SUCCESS == (ret = RegEnumKeyW(hkclsids, index, szclsid, sizeof(szclsid)/sizeof(szclsid[0]))))
|
||||||
{
|
{
|
||||||
index++;
|
index++;
|
||||||
|
|
||||||
RegOpenKeyExA(hkclsids, szclsid, 0, KEY_READ, &hkey);
|
RegOpenKeyExW(hkclsids, szclsid, 0, KEY_READ, &hkey);
|
||||||
|
|
||||||
len = MAX_PATH;
|
len = sizeof(keyname);
|
||||||
if (ERROR_SUCCESS != RegQueryValueA(hkey, "Insertable", keyname, &len))
|
if (ERROR_SUCCESS != RegQueryValueW(hkey, szInsertable, keyname, &len))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
len = MAX_PATH;
|
len = sizeof(keyname);
|
||||||
if (ERROR_SUCCESS == RegQueryValueA(hkey, "NotInsertable", keyname, &len))
|
if (ERROR_SUCCESS == RegQueryValueW(hkey, szNotInsertable, keyname, &len))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
RtlMultiByteToUnicodeN(wszclsid, MAX_PATH, NULL, szclsid, MAX_PATH);
|
CLSIDFromString(szclsid, &clsid);
|
||||||
CLSIDFromString(wszclsid, &clsid);
|
|
||||||
|
|
||||||
for (i = 0; i < pdlgInfo->lpOleUIInsertObject->cClsidExclude; i++)
|
for (i = 0; i < pdlgInfo->lpOleUIInsertObject->cClsidExclude; i++)
|
||||||
if (IsEqualGUID(&pdlgInfo->lpOleUIInsertObject->lpClsidExclude[i], &clsid))
|
if (IsEqualGUID(&pdlgInfo->lpOleUIInsertObject->lpClsidExclude[i], &clsid))
|
||||||
|
@ -372,14 +373,14 @@ static BOOL UIINSERTOBJECTDLG_PopulateObjectTypes(InsertObjectDlgInfo* pdlgInfo)
|
||||||
if (i < pdlgInfo->lpOleUIInsertObject->cClsidExclude)
|
if (i < pdlgInfo->lpOleUIInsertObject->cClsidExclude)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
len = MAX_PATH;
|
len = sizeof(keydesc);
|
||||||
if (ERROR_SUCCESS == RegQueryValueA(hkey, NULL, keydesc, &len))
|
if (ERROR_SUCCESS == RegQueryValueW(hkey, NULL, keydesc, &len))
|
||||||
{
|
{
|
||||||
CLSID* lpclsid = HeapAlloc(GetProcessHeap(), 0, sizeof(CLSID));
|
CLSID* lpclsid = HeapAlloc(GetProcessHeap(), 0, sizeof(CLSID));
|
||||||
memcpy(lpclsid, &clsid, sizeof(CLSID));
|
memcpy(lpclsid, &clsid, sizeof(CLSID));
|
||||||
|
|
||||||
len = SendMessageA(pdlgInfo->hwndObjTypeLB, LB_ADDSTRING, 0, (LPARAM)keydesc);
|
len = SendMessageW(pdlgInfo->hwndObjTypeLB, LB_ADDSTRING, 0, (LPARAM)keydesc);
|
||||||
SendMessageA(pdlgInfo->hwndObjTypeLB, LB_SETITEMDATA, (WPARAM)len, (LPARAM)lpclsid);
|
SendMessageW(pdlgInfo->hwndObjTypeLB, LB_SETITEMDATA, (WPARAM)len, (LPARAM)lpclsid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -471,17 +472,15 @@ static BOOL UIINSERTOBJECTDLG_OnOpen(InsertObjectDlgInfo* pdlgInfo)
|
||||||
}
|
}
|
||||||
else if (BST_CHECKED == SendMessageA(pdlgInfo->hwndCreateFromFileCB, BM_GETCHECK, 0, 0))
|
else if (BST_CHECKED == SendMessageA(pdlgInfo->hwndCreateFromFileCB, BM_GETCHECK, 0, 0))
|
||||||
{
|
{
|
||||||
char fname[MAX_PATH];
|
|
||||||
|
|
||||||
if (pdlgInfo->lpOleUIInsertObject->lpszFile)
|
if (pdlgInfo->lpOleUIInsertObject->lpszFile)
|
||||||
{
|
{
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
WCHAR wcsFile[MAX_PATH];
|
WCHAR wcsFile[MAX_PATH];
|
||||||
|
|
||||||
SendMessageA(pdlgInfo->hwndFileTB, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)fname);
|
if (SendMessageW(pdlgInfo->hwndFileTB, WM_GETTEXT, MAX_PATH, (LPARAM)wcsFile))
|
||||||
lstrcpynA(pdlgInfo->lpOleUIInsertObject->lpszFile, fname, pdlgInfo->lpOleUIInsertObject->cchFile);
|
WideCharToMultiByte(CP_ACP, 0, wcsFile, -1,
|
||||||
|
pdlgInfo->lpOleUIInsertObject->lpszFile, pdlgInfo->lpOleUIInsertObject->cchFile, NULL, NULL);
|
||||||
|
|
||||||
RtlMultiByteToUnicodeN(wcsFile, MAX_PATH, NULL, fname, MAX_PATH);
|
|
||||||
if (ERROR_SUCCESS == (hres = GetClassFile(wcsFile, &pdlgInfo->lpOleUIInsertObject->clsid)))
|
if (ERROR_SUCCESS == (hres = GetClassFile(wcsFile, &pdlgInfo->lpOleUIInsertObject->clsid)))
|
||||||
{
|
{
|
||||||
if (pdlgInfo->lpOleUIInsertObject->dwFlags & IOF_CREATEFILEOBJECT)
|
if (pdlgInfo->lpOleUIInsertObject->dwFlags & IOF_CREATEFILEOBJECT)
|
||||||
|
|
Loading…
Reference in New Issue