Huw Davies : oleaut32: Implement proxy / stub for ITypeInfo_GetDllEntry.

Alexandre Julliard julliard at winehq.org
Fri Feb 11 11:16:35 CST 2011


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

Author: Huw Davies <huw at codeweavers.com>
Date:   Fri Feb 11 10:08:43 2011 +0000

oleaut32: Implement proxy / stub for ITypeInfo_GetDllEntry.

---

 dlls/oleaut32/usrmarshal.c |   56 +++++++++++++++++++++++++++++---------------
 1 files changed, 37 insertions(+), 19 deletions(-)

diff --git a/dlls/oleaut32/usrmarshal.c b/dlls/oleaut32/usrmarshal.c
index f83b908..d6e4bdd 100644
--- a/dlls/oleaut32/usrmarshal.c
+++ b/dlls/oleaut32/usrmarshal.c
@@ -1696,29 +1696,47 @@ HRESULT __RPC_STUB ITypeInfo_GetDocumentation_Stub(ITypeInfo *This, MEMBERID mem
     return ITypeInfo_GetDocumentation(This, memid, name, doc_string, help_context, help_file);
 }
 
-HRESULT CALLBACK ITypeInfo_GetDllEntry_Proxy(
-    ITypeInfo* This,
-    MEMBERID memid,
-    INVOKEKIND invKind,
-    BSTR* pBstrDllName,
-    BSTR* pBstrName,
-    WORD* pwOrdinal)
+HRESULT CALLBACK ITypeInfo_GetDllEntry_Proxy(ITypeInfo *This, MEMBERID memid,
+                                             INVOKEKIND invkind, BSTR *dll_name,
+                                             BSTR* name, WORD *ordinal)
 {
-  FIXME("not implemented\n");
-  return E_FAIL;
+    DWORD flags = 0;
+    BSTR dummy_dll_name, dummy_name;
+    WORD dummy_ordinal;
+    HRESULT hr;
+    TRACE("(%p, %08x, %x, %p, %p, %p)\n", This, memid, invkind, dll_name, name, ordinal);
+
+    if(!dll_name) dll_name = &dummy_dll_name;
+    else flags = 1;
+
+    if(!name) name = &dummy_name;
+    else flags |= 2;
+
+    if(!ordinal) ordinal = &dummy_ordinal;
+    else flags |= 4;
+
+    hr = ITypeInfo_RemoteGetDllEntry_Proxy(This, memid, invkind, flags, dll_name, name, ordinal);
+
+    /* We don't need to free the dummy BSTRs since the stub ensures that these will be NULLs. */
+
+    return hr;
 }
 
-HRESULT __RPC_STUB ITypeInfo_GetDllEntry_Stub(
-    ITypeInfo* This,
-    MEMBERID memid,
-    INVOKEKIND invKind,
-    DWORD refPtrFlags,
-    BSTR* pBstrDllName,
-    BSTR* pBstrName,
-    WORD* pwOrdinal)
+HRESULT __RPC_STUB ITypeInfo_GetDllEntry_Stub(ITypeInfo *This, MEMBERID memid,
+                                              INVOKEKIND invkind, DWORD flags,
+                                              BSTR *dll_name, BSTR *name,
+                                              WORD *ordinal)
 {
-  FIXME("not implemented\n");
-  return E_FAIL;
+    TRACE("(%p, %08x, %x, %p, %p, %p)\n", This, memid, invkind, dll_name, name, ordinal);
+
+    *dll_name = *name = NULL;
+    *ordinal = 0;
+
+    if(!(flags & 1)) dll_name = NULL;
+    if(!(flags & 2)) name = NULL;
+    if(!(flags & 4)) ordinal = NULL;
+
+    return ITypeInfo_GetDllEntry(This, memid, invkind, dll_name, name, ordinal);
 }
 
 HRESULT CALLBACK ITypeInfo_AddressOfMember_Proxy(




More information about the wine-cvs mailing list