HRESULT hr;
IStream *stream;
HANDLE map;
+ IUnknown *unk;
TRACE("(%p,%p)\n", hwnd, pDropTarget);
hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
if(FAILED(hr)) return hr;
- hr = CoMarshalInterface(stream, &IID_IDropTarget, (IUnknown*)pDropTarget, MSHCTX_LOCAL, NULL, MSHLFLAGS_TABLESTRONG);
+ hr = IDropTarget_QueryInterface(pDropTarget, &IID_IUnknown, (void**)&unk);
+ if(FAILED(hr))
+ {
+ IStream_Release(stream);
+ return hr;
+ }
+ hr = CoMarshalInterface(stream, &IID_IDropTarget, unk, MSHCTX_LOCAL, NULL, MSHLFLAGS_TABLESTRONG);
+ IUnknown_Release(unk);
+
if(SUCCEEDED(hr))
{
hr = create_map_from_stream(stream, &map);
439 stdcall VarUI8FromUI2(long ptr)
440 stdcall VarUI8FromUI4(long ptr)
441 stdcall VarUI8FromDec(long ptr)
+442 stdcall RegisterTypeLibForUser(ptr wstr wstr)
+443 stdcall UnRegisterTypeLibForUser(ptr long long long long)
@ stdcall -private DllCanUnloadNow()
@ stdcall -private DllGetClassObject(ptr ptr ptr)
return result;
}
+/******************************************************************************
+ * RegisterTypeLibForUser [OLEAUT32.442]
+ * Adds information about a type library to the user registry
+ * NOTES
+ * Docs: ITypeLib FAR * ptlib
+ * Docs: OLECHAR FAR* szFullPath
+ * Docs: OLECHAR FAR* szHelpDir
+ *
+ * RETURNS
+ * Success: S_OK
+ * Failure: Status
+ */
+HRESULT WINAPI RegisterTypeLibForUser(
+ ITypeLib * ptlib, /* [in] Pointer to the library*/
+ OLECHAR * szFullPath, /* [in] full Path of the library*/
+ OLECHAR * szHelpDir) /* [in] dir to the helpfile for the library,
+ may be NULL*/
+{
+ FIXME("(%p, %s, %s) registering the typelib system-wide\n", ptlib,
+ debugstr_w(szFullPath), debugstr_w(szHelpDir));
+ return RegisterTypeLib(ptlib, szFullPath, szHelpDir);
+}
+
+/******************************************************************************
+ * UnRegisterTypeLibForUser [OLEAUT32.443]
+ * Removes information about a type library from the user registry
+ *
+ * RETURNS
+ * Success: S_OK
+ * Failure: Status
+ */
+HRESULT WINAPI UnRegisterTypeLibForUser(
+ REFGUID libid, /* [in] GUID of the library */
+ WORD wVerMajor, /* [in] major version */
+ WORD wVerMinor, /* [in] minor version */
+ LCID lcid, /* [in] locale id */
+ SYSKIND syskind)
+{
+ FIXME("(%s, %u, %u, %u, %u) unregistering the typelib system-wide\n",
+ debugstr_guid(libid), wVerMajor, wVerMinor, lcid, syskind);
+ return UnRegisterTypeLib(libid, wVerMajor, wVerMinor, lcid, syskind);
+}
+
/*======================= ITypeLib implementation =======================*/
typedef struct tagTLBCustData
unsigned int var_index;
TYPEKIND type_kind;
HRESULT hres;
- const TLBFuncDesc *pFuncInfo = This->funclist;
+ const TLBFuncDesc *pFuncInfo;
TRACE("(%p)(%p,id=%d,flags=0x%08x,%p,%p,%p,%p)\n",
This,pIUnk,memid,wFlags,pDispParams,pVarResult,pExcepInfo,pArgErr
);
- if( pFuncInfo->funcdesc.wFuncFlags == FUNCFLAG_FRESTRICTED )
+ if( This->TypeAttr.wTypeFlags & TYPEFLAG_FRESTRICTED )
return DISP_E_MEMBERNOTFOUND;
if (!pDispParams)
* FUNCDESC for dispinterfaces and we want the real function description */
for (pFuncInfo = This->funclist; pFuncInfo; pFuncInfo=pFuncInfo->next)
if ((memid == pFuncInfo->funcdesc.memid) &&
- (wFlags & pFuncInfo->funcdesc.invkind))
+ (wFlags & pFuncInfo->funcdesc.invkind) &&
+ (pFuncInfo->funcdesc.wFuncFlags & FUNCFLAG_FRESTRICTED) == 0)
break;
if (pFuncInfo) {
while (offset != -1) {
guidentry = (MSFT_GuidEntry *)&This->typelib_segment_data[MSFT_SEG_GUID][offset];
- if (!memcmp(guidentry, guid, sizeof(GUID))) return offset;
+ if (IsEqualGUID(guidentry, guid)) return offset;
offset = guidentry->next_hash;
}
impinfo.oGuid = guid_offset;
*phRefType = ctl2_alloc_importinfo(This->typelib, &impinfo)+1;
- if(!memcmp(&guid.guid, &IID_IDispatch, sizeof(GUID)))
+ if(IsEqualGUID(&guid.guid, &IID_IDispatch))
This->typelib->typelib_header.dispatchpos = *phRefType;
}
return hres;
}
- if(!memcmp(&typeattr->guid, &IID_IDispatch, sizeof(IDispatch)))
+ if(IsEqualGUID(&typeattr->guid, &IID_IDispatch))
This->typeinfo->flags |= TYPEFLAG_FDISPATCHABLE;
This->typeinfo->datatype2 += (typeattr->cFuncs<<16) + 1;
ULONG JolietLevel;
ULONG RootStart;
ULONG RootSize;
- WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH];
+ WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
ULONG VolumeLabelLength;
ULONG SerialNumber;
} CDINFO, *PCDINFO;
/* Extract the volume label */
pc = Pvd->VolumeId;
pw = CdInfo->VolumeLabel;
- for (i = 0; i < MAXIMUM_VOLUME_LABEL_LENGTH && *pc != ' '; i++)
+ for (i = 0; i < MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR); i++)
{
*pw++ = (WCHAR)*pc++;
}
*pw = 0;
+
+ /* Trim trailing spaces */
+ while (pw > CdInfo->VolumeLabel)
+ {
+ if (*--pw != ' ') break;
+
+ /* Remove the space */
+ *pw = '\0';
+
+ /* Decrease size */
+ i--;
+ }
+
CdInfo->VolumeLabelLength = i * sizeof(WCHAR);
CdInfo->VolumeSpaceSize = Pvd->VolumeSpaceSizeL;
{
ULONG iNewColor;
+ /* Copy blue */
+ iColor >>= 3;
+ iNewColor = iColor & 0x1F;
+
+ /* Copy green */
+ iColor >>= 3;
+ iNewColor |= iColor & 0x3E0;
+
+ /* Copy red */
+ iColor >>= 3;
+ iNewColor |= iColor & 0x7C00;
+
+ return iNewColor;
+}
+
+ULONG
+FASTCALL
+EXLATEOBJ_iXlateBGRto555(PEXLATEOBJ pxlo, ULONG iColor)
+{
+ ULONG iNewColor;
+
/* Copy red */
iColor <<= 7;
iNewColor = iColor & 0x7C00;
/* Copy green */
iColor >>= 13;
- iNewColor |= iColor & 0x3E0;
+ iNewColor |= (iColor & 0x3E0);
- /* Copy green */
+ /* Copy blue */
iColor >>= 13;
- iNewColor |= iColor & 0x1F;
+ iNewColor |= (iColor & 0x1F);
return iNewColor;
}
ULONG
FASTCALL
-EXLATEOBJ_iXlateBGRto555(PEXLATEOBJ pxlo, ULONG iColor)
+EXLATEOBJ_iXlateRGBto565(PEXLATEOBJ pxlo, ULONG iColor)
{
ULONG iNewColor;
iNewColor = iColor & 0x1f;
/* Copy green */
- iColor >>= 3;
- iNewColor |= (iColor & 0x3E0);
+ iColor >>= 2;
+ iNewColor |= (iColor & 0x7E0);
/* Copy red */
iColor >>= 3;
- iNewColor |= (iColor & 0x7C00);
+ iNewColor |= (iColor & 0xF800);
return iNewColor;
}
ULONG
FASTCALL
-EXLATEOBJ_iXlateRGBto565(PEXLATEOBJ pxlo, ULONG iColor)
+EXLATEOBJ_iXlateBGRto565(PEXLATEOBJ pxlo, ULONG iColor)
{
ULONG iNewColor;
return iNewColor;
}
-ULONG
-FASTCALL
-EXLATEOBJ_iXlateBGRto565(PEXLATEOBJ pxlo, ULONG iColor)
-{
- ULONG iNewColor;
-
- /* Copy blue */
- iColor >>= 3;
- iNewColor = iColor & 0x1f;
-
- /* Copy green */
- iColor >>= 2;
- iNewColor |= (iColor & 0x7E0);
-
- /* Copy red */
- iColor >>= 3;
- iNewColor |= (iColor & 0xF800);
-
- return iNewColor;
-}
-
ULONG
FASTCALL
EXLATEOBJ_iXlateRGBtoPal(PEXLATEOBJ pexlo, ULONG iColor)
ULONG iNewColor;
/* Copy blue */
- iNewColor = gajXlate5to8[iColor & 0x1F] << 16;
+ iNewColor = gajXlate5to8[iColor & 0x1F];
/* Copy green */
iColor >>= 5;
/* Copy red */
iColor >>= 5;
- iNewColor |= gajXlate5to8[iColor & 0x1F];
+ iNewColor |= gajXlate5to8[iColor & 0x1F] << 16;
return iNewColor;
}
ULONG iNewColor;
/* Copy blue */
- iNewColor = gajXlate5to8[iColor & 0x1F];
+ iNewColor = gajXlate5to8[iColor & 0x1F] << 16;
/* Copy green */
iColor >>= 5;
/* Copy red */
iColor >>= 5;
- iNewColor |= gajXlate5to8[iColor & 0x1F] << 16;
+ iNewColor |= gajXlate5to8[iColor & 0x1F];
return iNewColor;
}
ULONG iNewColor;
/* Copy blue */
- iNewColor = gajXlate5to8[iColor & 0x1F] << 16;
+ iNewColor = gajXlate5to8[iColor & 0x1F];
/* Copy green */
iColor >>= 5;
/* Copy red */
iColor >>= 6;
- iNewColor |= gajXlate5to8[iColor & 0x1F];
+ iNewColor |= gajXlate5to8[iColor & 0x1F] << 16;
return iNewColor;
}
ULONG iNewColor;
/* Copy blue */
- iNewColor = gajXlate5to8[iColor & 0x1F];
+ iNewColor = gajXlate5to8[iColor & 0x1F] << 16;
/* Copy green */
iColor >>= 5;
iNewColor |= gajXlate6to8[iColor & 0x3F] << 8;
- /* Copy blue */
+ /* Copy red */
iColor >>= 6;
- iNewColor |= gajXlate5to8[iColor & 0x1F] << 16;
+ iNewColor |= gajXlate5to8[iColor & 0x1F];
return iNewColor;
}