yay! This solves the mismatch between msvc and gcc when returning a struct in NdrClientCall2. Thanks for all the help with this, guys. Once NdrClientCall2 becomes a little more useful, I'll try to make a patch to restore source compatibility. Changelog: * dlls/rpcrt4/ndr_stubless.c; include/rpcndr.h: Greg Turner <gmturner007@ameritech.net> - use the msvc way to return a struct, fixing wierd problems. LICENSE: X11 -- gmt "It has been well said that really up-to-date liberals do not care what people do, as long as it is compulsory." -George F. Will
Index: include/rpcndr.h =================================================================== RCS file: /home/wine/wine/include/rpcndr.h,v retrieving revision 1.8 diff -u -r1.8 rpcndr.h --- include/rpcndr.h 10 Oct 2002 19:23:33 -0000 1.8 +++ include/rpcndr.h 15 Oct 2002 23:31:33 -0000 @@ -276,9 +276,9 @@ RPCRTAPI void RPC_ENTRY NdrConvert( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat ); -CLIENT_CALL_RETURN RPC_VAR_ENTRY +LONG_PTR /* CLIENT_CALL_RETURN */ RPC_VAR_ENTRY NdrClientCall2( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... ); -CLIENT_CALL_RETURN RPC_VAR_ENTRY +LONG_PTR /* CLIENT_CALL_RETURN */ RPC_VAR_ENTRY NdrClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... ); RPCRTAPI void RPC_ENTRY --- dlls/rpcrt4/ndr_stubless.c.D_PL2 2002-10-13 22:02:13.000000000 -0500 +++ dlls/rpcrt4/ndr_stubless.c 2002-10-15 18:17:58.000000000 -0500 @@ -39,7 +39,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(ole); -LONG_PTR RPCRT4_NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pFormat, va_list args) +LONG_PTR /* CLIENT_CALL_RETURN */ RPCRT4_NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pFormat, va_list args) { RPC_CLIENT_INTERFACE *rpc_cli_if = (RPC_CLIENT_INTERFACE *)(pStubDesc->RpcInterfaceInformation); @@ -62,17 +62,16 @@ /*********************************************************************** * NdrClientCall2 [RPCRT4.@] */ -CLIENT_CALL_RETURN WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, - PFORMAT_STRING pFormat, - ...) +LONG_PTR /* CLIENT_CALL_RETURN */ WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, + PFORMAT_STRING pFormat, ...) { - CLIENT_CALL_RETURN ret; + LONG_PTR ret; va_list args; TRACE("(%p,%p,...)\n", pStubDesc, pFormat); va_start(args, pFormat); - ret = (CLIENT_CALL_RETURN)RPCRT4_NdrClientCall2(pStubDesc, pFormat, args); + ret = RPCRT4_NdrClientCall2(pStubDesc, pFormat, args); va_end(args); return ret; }