| /* |
| * Copyright 2011 Michal Zietek |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #include <stdarg.h> |
| |
| #define COBJMACROS |
| #define CONST_VTABLE |
| |
| #include <windef.h> |
| #include <winbase.h> |
| #include <ole2.h> |
| |
| #include "wscript.h" |
| |
| #include <wine/debug.h> |
| |
| WINE_DEFAULT_DEBUG_CHANNEL(wscript); |
| |
| WCHAR **argums; |
| int numOfArgs; |
| |
| static HRESULT WINAPI Arguments2_QueryInterface(IArguments2 *iface, REFIID riid, void **ppv) |
| { |
| WINE_TRACE("(%s %p)\n", wine_dbgstr_guid(riid), ppv); |
| |
| if(IsEqualGUID(&IID_IUnknown, riid) |
| || IsEqualGUID(&IID_IDispatch, riid) |
| || IsEqualGUID(&IID_IArguments2, riid)) { |
| *ppv = iface; |
| return S_OK; |
| } |
| |
| *ppv = NULL; |
| return E_NOINTERFACE; |
| } |
| |
| static ULONG WINAPI Arguments2_AddRef(IArguments2 *iface) |
| { |
| return 2; |
| } |
| |
| static ULONG WINAPI Arguments2_Release(IArguments2 *iface) |
| { |
| return 1; |
| } |
| |
| static HRESULT WINAPI Arguments2_GetTypeInfoCount(IArguments2 *iface, UINT *pctinfo) |
| { |
| WINE_TRACE("(%p)\n", pctinfo); |
| |
| *pctinfo = 1; |
| return S_OK; |
| } |
| |
| static HRESULT WINAPI Arguments2_GetTypeInfo(IArguments2 *iface, UINT iTInfo, LCID lcid, |
| ITypeInfo **ppTInfo) |
| { |
| WINE_TRACE("(%x %x %p\n", iTInfo, lcid, ppTInfo); |
| |
| ITypeInfo_AddRef(arguments_ti); |
| *ppTInfo = arguments_ti; |
| return S_OK; |
| } |
| |
| static HRESULT WINAPI Arguments2_GetIDsOfNames(IArguments2 *iface, REFIID riid, LPOLESTR *rgszNames, |
| UINT cNames, LCID lcid, DISPID *rgDispId) |
| { |
| WINE_TRACE("(%s %p %d %x %p)\n", wine_dbgstr_guid(riid), rgszNames, |
| cNames, lcid, rgDispId); |
| |
| return ITypeInfo_GetIDsOfNames(arguments_ti, rgszNames, cNames, rgDispId); |
| } |
| |
| static HRESULT WINAPI Arguments2_Invoke(IArguments2 *iface, DISPID dispIdMember, REFIID riid, |
| LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, |
| EXCEPINFO *pExcepInfo, UINT *puArgErr) |
| { |
| WINE_TRACE("(%d %p %p)\n", dispIdMember, pDispParams, pVarResult); |
| |
| return ITypeInfo_Invoke(arguments_ti, iface, dispIdMember, wFlags, pDispParams, |
| pVarResult, pExcepInfo, puArgErr); |
| } |
| |
| static HRESULT WINAPI Arguments2_Item(IArguments2 *iface, LONG index, BSTR *out_Value) |
| { |
| WINE_TRACE("(%d %p)\n", index, out_Value); |
| |
| if(index<0 || index >= numOfArgs) |
| return E_INVALIDARG; |
| if(!(*out_Value = SysAllocString(argums[index]))) |
| return E_OUTOFMEMORY; |
| |
| return S_OK; |
| } |
| |
| static HRESULT WINAPI Arguments2_Count(IArguments2 *iface, LONG *out_Count) |
| { |
| WINE_TRACE("(%p)\n", out_Count); |
| |
| *out_Count = numOfArgs; |
| return S_OK; |
| } |
| |
| static HRESULT WINAPI Arguments2_get_length(IArguments2 *iface, LONG *out_Count) |
| { |
| WINE_TRACE("(%p)\n", out_Count); |
| |
| *out_Count = numOfArgs; |
| return S_OK; |
| } |
| |
| static const IArguments2Vtbl Arguments2Vtbl = { |
| Arguments2_QueryInterface, |
| Arguments2_AddRef, |
| Arguments2_Release, |
| Arguments2_GetTypeInfoCount, |
| Arguments2_GetTypeInfo, |
| Arguments2_GetIDsOfNames, |
| Arguments2_Invoke, |
| Arguments2_Item, |
| Arguments2_Count, |
| Arguments2_get_length |
| }; |
| |
| IArguments2 arguments_obj = { &Arguments2Vtbl }; |