[PATCH] widl: Only generate Proxy Stubs when functions have the call_as attribute

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Mon Jul 10 21:30:15 CDT 2017


Fixes: https://bugs.winehq.org/show_bug.cgi?id=43302

v2: Merge two matches together.
v3: Fix warning in windowscodecs

Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
 dlls/windowscodecs/tests/converter.c |  3 +++
 include/unknwn.idl                   | 10 ++++++++++
 tools/widl/header.c                  |  2 +-
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c
index 9da82f1..fba7fc7 100644
--- a/dlls/windowscodecs/tests/converter.c
+++ b/dlls/windowscodecs/tests/converter.c
@@ -45,6 +45,9 @@ typedef struct BitmapTestSrc {
     const bitmap_data *data;
 } BitmapTestSrc;
 
+extern HRESULT STDMETHODCALLTYPE IWICBitmapFrameEncode_WriteSource_Proxy(IWICBitmapFrameEncode* This,
+    IWICBitmapSource *pIBitmapSource, WICRect *prc);
+
 static BOOL near_equal(float a, float b)
 {
     return fabsf(a - b) < 0.001;
diff --git a/include/unknwn.idl b/include/unknwn.idl
index 78a2d9d..7856a7f 100644
--- a/include/unknwn.idl
+++ b/include/unknwn.idl
@@ -46,6 +46,16 @@ interface IUnknown
   ULONG Release();
 }
 
+cpp_quote("HRESULT STDMETHODCALLTYPE IUnknown_QueryInterface_Proxy(IUnknown* This, REFIID riid, void **ppvObject);")
+cpp_quote("void __RPC_STUB IUnknown_QueryInterface_Stub(IRpcStubBuffer* This, IRpcChannelBuffer* pRpcChannelBuffer,")
+cpp_quote("     PRPC_MESSAGE pRpcMessage, DWORD* pdwStubPhase);")
+cpp_quote("ULONG STDMETHODCALLTYPE IUnknown_AddRef_Proxy(IUnknown* This);")
+cpp_quote("void __RPC_STUB IUnknown_AddRef_Stub(IRpcStubBuffer* This, IRpcChannelBuffer* pRpcChannelBuffer,")
+cpp_quote("     PRPC_MESSAGE pRpcMessage, DWORD* pdwStubPhase);")
+cpp_quote("ULONG STDMETHODCALLTYPE IUnknown_Release_Proxy(IUnknown* This);")
+cpp_quote("void __RPC_STUB IUnknown_Release_Stub(IRpcStubBuffer* This, IRpcChannelBuffer* pRpcChannelBuffer,")
+cpp_quote("     PRPC_MESSAGE pRpcMessage, DWORD* pdwStubPhase);")
+
 cpp_quote("#ifdef SAVE_WIDL_C_INLINE_WRAPPERS")
 cpp_quote("#define WIDL_C_INLINE_WRAPPERS")
 cpp_quote("#endif")
diff --git a/tools/widl/header.c b/tools/widl/header.c
index 7b97158..e48b488 100644
--- a/tools/widl/header.c
+++ b/tools/widl/header.c
@@ -1172,7 +1172,7 @@ static void write_method_proto(FILE *header, const type_t *iface)
   {
     const var_t *func = stmt->u.var;
 
-    if (!is_local(func->attrs)) {
+    if (is_callas(func->attrs)) {
       const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV);
       if (!callconv) callconv = "STDMETHODCALLTYPE";
       /* proxy prototype */
-- 
1.9.1




More information about the wine-patches mailing list