// Win32OleTestObj.cpp : CWin32OleTestObj のインプリメンテーション #include "stdafx.h" #include "TestObject.h" #include "Win32OleTestObj.h" ///////////////////////////////////////////////////////////////////////////// // CWin32OleTestObj HRESULT STDMETHODCALLTYPE CWin32OleTestObj::get_Name( /* [retval][out] */ BSTR __RPC_FAR *pResult) { *pResult = SysAllocString(m_Name); return S_OK; } HRESULT STDMETHODCALLTYPE CWin32OleTestObj::put_Name( /* [in] */ BSTR newName) { SysFreeString(m_Name); m_Name = SysAllocString(newName); return S_OK; } HRESULT STDMETHODCALLTYPE CWin32OleTestObj::OptArgs( /* [in] */ long param1, /* [in] */ long param2, /* [optional][in] */ VARIANT optArg, /* [retval][out] */ long __RPC_FAR *pResult) { *pResult = param1 + param2; VARIANT dest; VariantInit(&dest); if (VariantChangeType(&dest, &optArg, 0, VT_I4) == S_OK) { *pResult += dest.lVal; } return S_OK; } HRESULT STDMETHODCALLTYPE CWin32OleTestObj::Args( /* [in] */ long param1, /* [in] */ long param2, /* [retval][out] */ long __RPC_FAR *pResult) { if (param2 == 0) { *pResult = -1; } else { *pResult = param1 / param2; } return S_OK; } HRESULT STDMETHODCALLTYPE CWin32OleTestObj::VarArgs( /* [in] */ long param1, /* [in] */ SAFEARRAY __RPC_FAR * psa, /* [retval][out] */ long __RPC_FAR *pResult) { *pResult = param1; VARIANT* pv = reinterpret_cast(psa->pvData); VARIANT dest; for (unsigned int i = 0; i < psa->rgsabound[0].cElements; i++) { VariantInit(&dest); VariantChangeType(&dest, pv + i, 0, VT_I4); *pResult += dest.lVal; } return S_OK; }