📄 typelib2.c
字号:
This->names[index] = -1;
This->offsets[index] = offset;
/* figure out type widths and whatnot */
ctl2_encode_typedesc(This->typelib, &pVarDesc->elemdescVar.tdesc,
&typedata[1], &var_datawidth, &var_alignment,
&var_type_size);
/* pad out starting position to data width */
This->datawidth += var_alignment - 1;
This->datawidth &= ~(var_alignment - 1);
typedata[4] = This->datawidth;
/* add the new variable to the total data width */
This->datawidth += var_datawidth;
/* add type description size to total required allocation */
typedata[3] += var_type_size << 16;
/* fix type alignment */
alignment = (This->typeinfo->typekind >> 11) & 0x1f;
if (alignment < var_alignment) {
alignment = var_alignment;
This->typeinfo->typekind &= ~0xf800;
This->typeinfo->typekind |= alignment << 11;
}
/* ??? */
if (!This->typeinfo->res2) This->typeinfo->res2 = 0x1a;
if ((index == 0) || (index == 1) || (index == 2) || (index == 4) || (index == 9)) {
This->typeinfo->res2 <<= 1;
}
/* ??? */
if (This->typeinfo->res3 == -1) This->typeinfo->res3 = 0;
This->typeinfo->res3 += 0x2c;
/* increment the number of variable elements */
This->typeinfo->cElement += 0x10000;
/* pad data width to alignment */
This->typeinfo->size = (This->datawidth + (alignment - 1)) & ~(alignment - 1);
return S_OK;
}
/******************************************************************************
* ICreateTypeInfo2_SetFuncAndParamNames {OLEAUT32}
*
* See ICreateTypeInfo_SetFuncAndParamNames.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(
ICreateTypeInfo2* iface,
UINT index,
LPOLESTR* rgszNames,
UINT cNames)
{
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
int i;
int offset;
char *namedata;
FIXME("(%p,%d,%s,%d), stub!\n", iface, index, debugstr_w(*rgszNames), cNames);
offset = ctl2_alloc_name(This->typelib, rgszNames[0]);
This->names[index] = offset;
namedata = This->typelib->typelib_segment_data[MSFT_SEG_NAME] + offset;
namedata[9] &= ~0x10;
if (*((INT *)namedata) == -1) {
*((INT *)namedata) = This->typelib->typelib_typeinfo_offsets[This->typeinfo->typekind >> 16];
}
for (i = 1; i < cNames; i++) {
/* FIXME: Almost certainly easy to break */
int *paramdata = &This->typedata[This->offsets[index] >> 2];
offset = ctl2_alloc_name(This->typelib, rgszNames[i]);
paramdata[(i * 3) + 5] = offset;
}
return S_OK;
}
/******************************************************************************
* ICreateTypeInfo2_SetVarName {OLEAUT32}
*
* See ICreateTypeInfo_SetVarName.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnSetVarName(
ICreateTypeInfo2* iface,
UINT index,
LPOLESTR szName)
{
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
int offset;
char *namedata;
TRACE("(%p,%d,%s), stub!\n", iface, index, debugstr_w(szName));
if ((This->typeinfo->cElement >> 16) <= index) {
TRACE("Out-of-order element.\n");
return TYPE_E_ELEMENTNOTFOUND;
}
offset = ctl2_alloc_name(This->typelib, szName);
if (offset == -1) return E_OUTOFMEMORY;
namedata = This->typelib->typelib_segment_data[MSFT_SEG_NAME] + offset;
if (*((INT *)namedata) == -1) {
*((INT *)namedata) = This->typelib->typelib_typeinfo_offsets[This->typeinfo->typekind >> 16];
namedata[9] |= 0x10;
}
if ((This->typeinfo->typekind & 15) == TKIND_ENUM) {
namedata[9] |= 0x20;
}
This->names[index] = offset;
return S_OK;
}
/******************************************************************************
* ICreateTypeInfo2_SetTypeDescAlias {OLEAUT32}
*
* See ICreateTypeInfo_SetTypeDescAlias.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeDescAlias(
ICreateTypeInfo2* iface,
TYPEDESC* pTDescAlias)
{
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
int encoded_typedesc;
int width;
if ((This->typeinfo->typekind & 15) != TKIND_ALIAS) {
return TYPE_E_WRONGTYPEKIND;
}
FIXME("(%p,%p), hack!\n", iface, pTDescAlias);
if (ctl2_encode_typedesc(This->typelib, pTDescAlias, &encoded_typedesc, &width, NULL, NULL) == -1) {
return E_OUTOFMEMORY;
}
This->typeinfo->size = width;
This->typeinfo->datatype1 = encoded_typedesc;
return S_OK;
}
/******************************************************************************
* ICreateTypeInfo2_DefineFuncAsDllEntry {OLEAUT32}
*
* See ICreateTypeInfo_DefineFuncAsDllEntry.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnDefineFuncAsDllEntry(
ICreateTypeInfo2* iface,
UINT index,
LPOLESTR szDllName,
LPOLESTR szProcName)
{
FIXME("(%p,%d,%s,%s), stub!\n", iface, index, debugstr_w(szDllName), debugstr_w(szProcName));
return E_OUTOFMEMORY;
}
/******************************************************************************
* ICreateTypeInfo2_SetFuncDocString {OLEAUT32}
*
* See ICreateTypeInfo_SetFuncDocString.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncDocString(
ICreateTypeInfo2* iface,
UINT index,
LPOLESTR szDocString)
{
FIXME("(%p,%d,%s), stub!\n", iface, index, debugstr_w(szDocString));
return E_OUTOFMEMORY;
}
/******************************************************************************
* ICreateTypeInfo2_SetVarDocString {OLEAUT32}
*
* See ICreateTypeInfo_SetVarDocString.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnSetVarDocString(
ICreateTypeInfo2* iface,
UINT index,
LPOLESTR szDocString)
{
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
FIXME("(%p,%d,%s), stub!\n", iface, index, debugstr_w(szDocString));
ctl2_alloc_string(This->typelib, szDocString);
return E_OUTOFMEMORY;
}
/******************************************************************************
* ICreateTypeInfo2_SetFuncHelpContext {OLEAUT32}
*
* See ICreateTypeInfo_SetFuncHelpContext.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncHelpContext(
ICreateTypeInfo2* iface,
UINT index,
DWORD dwHelpContext)
{
FIXME("(%p,%d,%d), stub!\n", iface, index, dwHelpContext);
return E_OUTOFMEMORY;
}
/******************************************************************************
* ICreateTypeInfo2_SetVarHelpContext {OLEAUT32}
*
* See ICreateTypeInfo_SetVarHelpContext.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnSetVarHelpContext(
ICreateTypeInfo2* iface,
UINT index,
DWORD dwHelpContext)
{
FIXME("(%p,%d,%d), stub!\n", iface, index, dwHelpContext);
return E_OUTOFMEMORY;
}
/******************************************************************************
* ICreateTypeInfo2_SetMops {OLEAUT32}
*
* See ICreateTypeInfo_SetMops.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnSetMops(
ICreateTypeInfo2* iface,
UINT index,
BSTR bstrMops)
{
FIXME("(%p,%d,%p), stub!\n", iface, index, bstrMops);
return E_OUTOFMEMORY;
}
/******************************************************************************
* ICreateTypeInfo2_SetTypeIdldesc {OLEAUT32}
*
* See ICreateTypeInfo_SetTypeIdldesc.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeIdldesc(
ICreateTypeInfo2* iface,
IDLDESC* pIdlDesc)
{
FIXME("(%p,%p), stub!\n", iface, pIdlDesc);
return E_OUTOFMEMORY;
}
/******************************************************************************
* ICreateTypeInfo2_LayOut {OLEAUT32}
*
* See ICreateTypeInfo_LayOut.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(
ICreateTypeInfo2* iface)
{
TRACE("(%p), stub!\n", iface);
/* return E_OUTOFMEMORY; */
return S_OK;
}
/******************************************************************************
* ICreateTypeInfo2_DeleteFuncDesc {OLEAUT32}
*
* Delete a function description from a type.
*
* RETURNS
*
* Success: S_OK.
* Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnDeleteFuncDesc(
ICreateTypeInfo2* iface, /* [I] The typeinfo from which to delete a function. */
UINT index) /* [I] The index of the function to delete. */
{
FIXME("(%p,%d), stub!\n", iface, index);
return E_OUTOFMEMORY;
}
/******************************************************************************
* ICreateTypeInfo2_DeleteFuncDescByMemId {OLEAUT32}
*
* Delete a function description from a type.
*
* RETURNS
*
* Success: S_OK.
* Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnDeleteFuncDescByMemId(
ICreateTypeInfo2* iface, /* [I] The typeinfo from which to delete a function. */
MEMBERID memid, /* [I] The member id of the function to delete. */
INVOKEKIND invKind) /* [I] The invocation type of the function to delete. (?) */
{
FIXME("(%p,%d,%d), stub!\n", iface, memid, invKind);
return E_OUTOFMEMORY;
}
/******************************************************************************
* ICreateTypeInfo2_DeleteVarDesc {OLEAUT32}
*
* Delete a variable description from a type.
*
* RETURNS
*
* Success: S_OK.
* Failure: One of E_OUTOFMEMORY, E_INVALIDARG, TYPE_E_IOERROR,
* TYPE_E_INVDATAREAD, TYPE_E_UNSUPFORMAT or TYPE_E_INVALIDSTATE.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnDeleteVarDesc(
ICreateTypeInfo2* iface, /* [I] The typeinfo from which to delete the variable description. */
UINT index) /* [I] The index of the variable description to delete. */
{
FIXME("(%p,%d), stub!\n", iface, index);
return E_OUTOFMEMORY;
}
/******************************************************************************
* ICreateTypeInfo2_DeleteVarDescByMemId {OLEAUT32}
*
* Delete a variable description from a type.
*
* RETURNS
*
* Success: S_OK.
* Failure: One of E_OUTOFMEMORY, E_INVALIDARG, TYPE_E_IOERROR,
* TYPE_E_INVDATAREAD, TYPE_E_UNSUPFORMAT or TYPE_E_INVALIDSTATE.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnDeleteVarDescByMemId(
ICreateTypeInfo2* iface, /* [I] The typeinfo from which to delete the variable description. */
MEMBERID memid) /* [I] The member id of the variable description to delete. */
{
FIXME("(%p,%d), stub!\n", iface, memid);
return E_OUTOFMEMORY;
}
/******************************************************************************
* ICreateTypeInfo2_DeleteImplType {OLEAUT32}
*
* Delete an interface implementation from a type. (?)
*
* RETURNS
*
* Success: S_OK.
* Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnDeleteImplType(
ICreateTypeInfo2* iface, /* [I] The typeinfo from which to delete. */
UINT index) /* [I] The index of the interface to delete. */
{
FIXME("(%p,%d), stub!\n", iface, index);
return E_OUTOFMEMORY;
}
/******************************************************************************
* ICreateTypeInfo2_SetCustData {OLEAUT32}
*
* Set the custom data for a type.
*
* RETURNS
*
* Success: S_OK.
* Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnSetCustData(
ICreateTypeInfo2* iface, /* [I] The typeinfo in which to set the custom data. */
REFGUID guid, /* [I] The GUID used as a key to retrieve the custom data. */
VARIANT* pVarVal) /* [I] The custom data. */
{
FIXME("(%p,%s,%p), stub!\n", iface, debugstr_guid(guid), pVarVal);
return E_OUTOFMEMORY;
}
/******************************************************************************
* ICreateTypeInfo2_SetFuncCustData {OLEAUT32}
*
* Set the custom data for a function.
*
* RETURNS
*
* Success: S_OK.
* Failure: One of E_OUTOFMEMORY or E_INVALIDARG.
*/
static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncCustData(
ICreateTypeInfo2* iface, /* [I] The typeinfo in which to set the custom data. */
UINT index, /* [I] The index of the function for which to set the custom data. */
REFGUID guid, /* [I] The GUID used as a key to retrieve the custom data. */
VARIANT* pVarVal) /* [I] The custom data. */
{
FIXME("(%p,%d,%s,%p), stub!\n", iface, index, debugstr_guid(guid), pVarVal);
return E_OUTOFMEMORY;
}
/******************************************************************************
* ICreateTypeInfo2_SetParamCustData {OLEAUT32}
*
* Set the custom data for a function parameter.
*
* RETURNS
*
* Success: S_OK.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -