Andrew Eikum : oleaut32: Implement basic ICreateTypeInfo functions.

Alexandre Julliard julliard at winehq.org
Tue May 28 15:16:58 CDT 2013


Module: wine
Branch: master
Commit: 6f6a487579efbce6cbdbe784efd91a4268225baf
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6f6a487579efbce6cbdbe784efd91a4268225baf

Author: Andrew Eikum <aeikum at codeweavers.com>
Date:   Fri May 24 11:28:39 2013 -0500

oleaut32: Implement basic ICreateTypeInfo functions.

---

 dlls/oleaut32/typelib.c |  102 +++++++++++++++++++++++++++++++++++++----------
 1 files changed, 81 insertions(+), 21 deletions(-)

diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 9bbd86f..83b503c 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -8307,40 +8307,68 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetGuid(ICreateTypeInfo2 *iface,
         REFGUID guid)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %s - stub\n", This, debugstr_guid(guid));
-    return E_NOTIMPL;
+
+    TRACE("%p %s\n", This, debugstr_guid(guid));
+
+    memcpy(&This->TypeAttr.guid, guid, sizeof(GUID));
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeFlags(ICreateTypeInfo2 *iface,
         UINT typeFlags)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %x - stub\n", This, typeFlags);
-    return E_NOTIMPL;
+
+    TRACE("%p %x\n", This, typeFlags);
+
+    if (typeFlags & TYPEFLAG_FDUAL)
+        typeFlags |= TYPEFLAG_FDISPATCHABLE;
+
+    This->TypeAttr.wTypeFlags = typeFlags;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnSetDocString(ICreateTypeInfo2 *iface,
-        LPOLESTR strDoc)
+        LPOLESTR doc)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %s - stub\n", This, wine_dbgstr_w(strDoc));
-    return E_NOTIMPL;
+
+    TRACE("%p %s\n", This, wine_dbgstr_w(doc));
+
+    if (!doc)
+        return E_INVALIDARG;
+
+    SysFreeString(This->DocString);
+    This->DocString = SysAllocString(doc);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnSetHelpContext(ICreateTypeInfo2 *iface,
         DWORD helpContext)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %d - stub\n", This, helpContext);
-    return E_NOTIMPL;
+
+    TRACE("%p %d\n", This, helpContext);
+
+    This->dwHelpContext = helpContext;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnSetVersion(ICreateTypeInfo2 *iface,
         WORD majorVerNum, WORD minorVerNum)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %d %d - stub\n", This, majorVerNum, minorVerNum);
-    return E_NOTIMPL;
+
+    TRACE("%p %d %d\n", This, majorVerNum, minorVerNum);
+
+    This->TypeAttr.wMajorVerNum = majorVerNum;
+    This->TypeAttr.wMinorVerNum = minorVerNum;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnAddRefTypeInfo(ICreateTypeInfo2 *iface,
@@ -8379,16 +8407,28 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetAlignment(ICreateTypeInfo2 *iface,
         WORD alignment)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %d - stub\n", This, alignment);
-    return E_NOTIMPL;
+
+    TRACE("%p %d\n", This, alignment);
+
+    This->TypeAttr.cbAlignment = alignment;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnSetSchema(ICreateTypeInfo2 *iface,
         LPOLESTR schema)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %s - stub\n", This, wine_dbgstr_w(schema));
-    return E_NOTIMPL;
+
+    TRACE("%p %s\n", This, wine_dbgstr_w(schema));
+
+    if (!schema)
+        return E_INVALIDARG;
+
+    SysFreeString(This->TypeAttr.lpstrSchema);
+    This->TypeAttr.lpstrSchema = SysAllocString(schema);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnAddVarDesc(ICreateTypeInfo2 *iface,
@@ -8475,8 +8515,16 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeIdldesc(ICreateTypeInfo2 *iface,
         IDLDESC *idlDesc)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %p - stub\n", This, idlDesc);
-    return E_NOTIMPL;
+
+    TRACE("%p %p\n", This, idlDesc);
+
+    if (!idlDesc)
+        return E_INVALIDARG;
+
+    This->TypeAttr.idldescType.dwReserved = idlDesc->dwReserved;
+    This->TypeAttr.idldescType.wIDLFlags = idlDesc->wIDLFlags;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(ICreateTypeInfo2 *iface)
@@ -8570,8 +8618,12 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetHelpStringContext(ICreateTypeInfo2 *
         ULONG helpStringContext)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %u - stub\n", This, helpStringContext);
-    return E_NOTIMPL;
+
+    TRACE("%p %u\n", This, helpStringContext);
+
+    This->dwHelpStringContext = helpStringContext;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncHelpStringContext(ICreateTypeInfo2 *iface,
@@ -8601,8 +8653,16 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetName(ICreateTypeInfo2 *iface,
         LPOLESTR name)
 {
     ITypeInfoImpl *This = info_impl_from_ICreateTypeInfo2(iface);
-    FIXME("%p %s - stub\n", This, wine_dbgstr_w(name));
-    return E_NOTIMPL;
+
+    TRACE("%p %s\n", This, wine_dbgstr_w(name));
+
+    if (!name)
+        return E_INVALIDARG;
+
+    SysFreeString(This->Name);
+    This->Name = SysAllocString(name);
+
+    return S_OK;
 }
 
 static const ICreateTypeInfo2Vtbl CreateTypeInfo2Vtbl = {




More information about the wine-cvs mailing list