Thread: [pywin32-checkins] pywin32/com/TestSources/PyCOMTest PyCOMImpl.cpp,1.10,1.11 PyCOMImpl.h,1.9,1.10 Py
OLD project page for the Python extensions for Windows
Brought to you by:
mhammond
From: Mark H. <mha...@us...> - 2005-06-27 11:02:56
|
Update of /cvsroot/pywin32/pywin32/com/TestSources/PyCOMTest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9704/TestSources/PyCOMTest Modified Files: PyCOMImpl.cpp PyCOMImpl.h PyCOMTest.idl Log Message: Fix [ 1203980 ] Universal Gateway mishandles ByRef Variant arguments Index: PyCOMTest.idl =================================================================== RCS file: /cvsroot/pywin32/pywin32/com/TestSources/PyCOMTest/PyCOMTest.idl,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** PyCOMTest.idl 31 May 2005 12:37:18 -0000 1.10 --- PyCOMTest.idl 27 Jun 2005 11:02:41 -0000 1.11 *************** *** 174,177 **** --- 174,180 ---- HRESULT GetSetDispatch([in] IDispatch *indisp, [out, retval] IDispatch **outdisp); HRESULT GetSetUnknown([in] IUnknown *inunk, [out, retval] IUnknown **outunk); + HRESULT GetSetVariant([in] VARIANT vin, [out, retval] VARIANT *vout); + HRESULT TestByRefVariant([in, out] VARIANT *v); + HRESULT TestByRefString([in, out] BSTR *v); HRESULT TakeByRefTypedDispatch([in, out] IPyCOMTest **inout); HRESULT TakeByRefDispatch([in, out] IDispatch **inout); Index: PyCOMImpl.h =================================================================== RCS file: /cvsroot/pywin32/pywin32/com/TestSources/PyCOMTest/PyCOMImpl.h,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** PyCOMImpl.h 31 May 2005 12:37:18 -0000 1.9 --- PyCOMImpl.h 27 Jun 2005 11:02:41 -0000 1.10 *************** *** 65,68 **** --- 65,71 ---- STDMETHOD(GetSetDispatch)(IDispatch *indisp, IDispatch **outdisp); STDMETHOD(GetSetUnknown)(IUnknown *inunk, IUnknown **outunk); + STDMETHOD(GetSetVariant)(VARIANT vin, VARIANT *vout); + STDMETHOD(TestByRefVariant)(VARIANT *v); + STDMETHOD(TestByRefString)(BSTR *v); STDMETHOD(TakeByRefTypedDispatch)(IPyCOMTest **inout); STDMETHOD(TakeByRefDispatch)(IDispatch **inout); Index: PyCOMImpl.cpp =================================================================== RCS file: /cvsroot/pywin32/pywin32/com/TestSources/PyCOMTest/PyCOMImpl.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** PyCOMImpl.cpp 31 May 2005 12:37:18 -0000 1.10 --- PyCOMImpl.cpp 27 Jun 2005 11:02:40 -0000 1.11 *************** *** 195,198 **** --- 195,223 ---- } + STDMETHODIMP CPyCOMTest::GetSetVariant(VARIANT var, VARIANT *out) + { + VariantClear(out); // necessary? + return VariantCopy(out, &var); + } + + STDMETHODIMP CPyCOMTest::TestByRefVariant(VARIANT *v) + { + if (V_VT(v)==VT_I4) { + V_I4(v) *= 2; + return S_OK; + } + return E_FAIL; + } + + STDMETHODIMP CPyCOMTest::TestByRefString(BSTR *v) + { + BSTR out = SysAllocStringLen(NULL, SysStringLen(*v)*2); + wcscpy(out, *v); + wcscat(out, *v); + SysFreeString(*v); + *v = out; + return S_OK; + } + STDMETHODIMP CPyCOMTest::TakeByRefTypedDispatch(IPyCOMTest **inout) { *************** *** 462,465 **** --- 487,494 ---- CHECK_TRUE(outstr == L"FooFoo"); + instr = L"Foo"; + CHECK_HR(tester->TestByRefString(&instr)); + CHECK_TRUE(instr == L"FooFoo"); + // Arrays int result; *************** *** 489,492 **** --- 518,536 ---- CComPtr<IPyCOMTest>obresult; CHECK_HR(tester->GetSetInterface(param, &obresult)); + + VARIANT v1, v2; + VariantInit(&v1); + VariantInit(&v2); + V_VT(&v1) = VT_I4; + V_I4(&v1) = 99; + CHECK_HR(tester->GetSetVariant(v1, &v2)); + CHECK_TRUE(V_VT(&v2)==VT_I4); + CHECK_TRUE(V_I4(&v2)==99); + CHECK_HR(tester->TestByRefVariant(&v2)); + CHECK_TRUE(V_VT(&v2)==VT_I4); + CHECK_TRUE(V_I4(&v2)==198); + VariantClear(&v1); + VariantClear(&v2); + // Make a vtable call on the returned object, so we // crash if a bad vtable. Don't care about the value tho. |