📄 comcalculatorobject.cpp
字号:
// COMCalculatorObject.cpp : Implementation of CCOMCalculatorApp and DLL registration.
#include "stdafx.h"
#include "COMCalculator.h"
#include "COMCalculatorObject.h"
#include "COMPlusCheck.h"
#include "COMPlus.h"
#include "COMMinusCheck.h"
#include "COMMinus.h"
#include "COMMultiplyCheck.h"
#include "COMMultiply.h"
#include "COMDivideCheck.h"
#include "COMDivide.h"
#include "COMRestore.h"
/////////////////////////////////////////////////////////////////////////////
//
STDMETHODIMP CCOMCalculatorObject::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_ICOMCalculatorObject,
};
for (int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
{
return S_OK;
}
}
return S_FALSE;
}
STDMETHODIMP CCOMCalculatorObject::Plus(float A, float B, float *pResult)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
if (!pResult)
{
return OUTPUT_NULL_POINTER;
}
CCOMPlusCheck Check(A,B);
CCOMPlus Plus(A,B);
return Calculate(&Check,&Plus,pResult);
}
STDMETHODIMP CCOMCalculatorObject::Minus(float A, float B, float *pResult)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
if (!pResult)
{
return OUTPUT_NULL_POINTER;
}
CCOMMinusCheck Check(A,B);
CCOMMinus Minus(A,B);
return Calculate(&Check,&Minus,pResult);
}
STDMETHODIMP CCOMCalculatorObject::Multiply(float A, float B, float *pResult)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
if ( !pResult )
{
return OUTPUT_NULL_POINTER;
}
CCOMMultiplyCheck Check( A,B );
CCOMMultiply Multiply( A,B );
return Calculate( &Check,&Multiply,pResult );
}
STDMETHODIMP CCOMCalculatorObject::Divide(float A, float B, float *pResult)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
if ( !pResult )
{
return OUTPUT_NULL_POINTER;
}
CCOMDivideCheck Check( A,B );
CCOMDivide Divide( A,B );
return Calculate( &Check,&Divide,pResult );
}
STDMETHODIMP CCOMCalculatorObject::Restore(LPTSTR csFileName, float *pA, float *pB)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
return RestoreABvalue( csFileName,pA,pB );
}
long CCOMCalculatorObject::Calculate(CCOMInputCheckBase *pCheck,
CCOMCalculatorBase *pCalculator,
float *pResult)
{
ASSERT(pCheck);
ASSERT(pCalculator);
ASSERT(pResult);
long lResult = pCheck->Check();
if (S_OK==lResult)
{
*pResult=pCalculator->Calculate();
}
return lResult;
}
long CCOMCalculatorObject::RestoreABvalue( CString csFileName,
float *pA,
float *pB )
{
ASSERT(pA);
ASSERT(pB);
CCOMRestore restore;
bool bResult = restore.ReadABvalueFromFile( csFileName );
for ( int i = 0; i < restore.m_aABvalue.GetSize(); )
{
if ( bResult )
{
CString csAvalue = restore.m_aABvalue.GetAt( i );
CString csBvalue = restore.m_aABvalue.GetAt( i+1 );
float Avalue = (float)atof( csAvalue );
float Bvalue = (float)atof( csBvalue );
*pA = Avalue;
*pB = Bvalue;
}
i += 2;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -