addin.cpp
来自「一个以前收集的基于C/S架构的ERP客户端源代码」· C++ 代码 · 共 149 行
CPP
149 行
#include <windows.h>
#include "addin.h"
#include "FinReport.h"
//////////////////////////////////////////////////////////////////////////////
// These strings provide the name and description of the add-in. The L beside
// the left quote causes the compiler to generate a Unicode string (i.e., it
// is a short array instead of a char array).
//
#define F1AddInName L"Sderp Finance Report Add-In"
#define F1AddInDesc L"Sderp finance report Add-In with Formula One 6 by Lu, only useful with sderp"
HRESULT MakeErrorResult(LPVARIANTARG pResult, HRESULT hrEval = S_OK)
{
if (hrEval)
{
if(SUCCEEDED(::VariantClear(pResult)))
{
pResult->vt = VT_ERROR;
pResult->scode = hrEval;
}
else
return E_OUTOFMEMORY;
}
return S_OK;
}
inline HRESULT CheckReturnValue(HRESULT hr)
{
return FAILED(hr) ? E_OUTOFMEMORY : S_OK;
}
HRESULT CALLBACK FinData(
LPVARIANTARG pResult, // Pointer to the VARIANT receiving the
int, // Ignore this argument; it's reserved for
int nArgs, // Number of arguments
LPVARIANTARG pArgs) // Pointer to an array of nArgs VARIANTs, each
{
if(nArgs == 3 || nArgs == 4)
{
try{
AnsiString Glkm;
AnsiString Period;
AnsiString Type;
AnsiString PerInc;
switch(pArgs[0].vt)
{
case VT_R8:
Glkm = IntToStr((__int64)pArgs[0].dblVal);
break;
case VT_BSTR:
Glkm = AnsiString(WideString(pArgs[0].bstrVal));
break;
}
Period = AnsiString(WideString(pArgs[1].bstrVal));
Type = AnsiString(WideString(pArgs[2].bstrVal));
switch(pArgs[3].vt)
{
case VT_R8:
PerInc = IntToStr((__int64)pArgs[3].dblVal);
break;
case VT_BSTR:
PerInc = AnsiString(WideString(pArgs[3].bstrVal));
break;
}
pResult[0].vt = VT_R8;
pResult[0].dblVal = StrToFloat(frmFinReport->FinData(Glkm, Period, Type, PerInc));
return S_OK;
}catch(...)
{
return ::MakeErrorResult(pResult, F1_E_VALUE);
}
}
return ::MakeErrorResult(pResult, F1_E_VALUE);
}
HRESULT CALLBACK KmName(
LPVARIANTARG pResult, // Pointer to the VARIANT receiving the
int, // Ignore this argument; it's reserved for
int nArgs, // Number of arguments
LPVARIANTARG pArgs) // Pointer to an array of nArgs VARIANTs, each
{
if(nArgs == 1)
{
AnsiString Glkm;
try{
switch(pArgs[0].vt)
{
case VT_R8:
Glkm = IntToStr((__int64)pArgs[0].dblVal);
break;
case VT_BSTR:
Glkm = AnsiString(WideString(pArgs[0].bstrVal));
break;
}
pResult[0].vt = VT_BSTR;
pResult[0].bstrVal = WideString(frmFinReport->KmName(Glkm));
return S_OK;
}catch(...)
{
return ::MakeErrorResult(pResult, F1_E_VALUE);
}
}
return ::MakeErrorResult(pResult, F1_E_VALUE);
}
//////////////////////////////////////////////////////////////////////////////
// F1AddInInit
//
// This exported function (see AddIn.def) registers the add-in's functions and
// other general information with Formula One. Formula One calls this
// function when it loads the add-in.
extern "C" HRESULT __stdcall F1AddInInit(
F1AddInRegisterInfoProc RegisterInfoProc,
F1AddInRegisterFunctionProc RegisterFunctionProc,
int,
int)
{
HRESULT hr = S_OK;
if(SUCCEEDED(hr))
hr = RegisterFunctionProc(
L"财务数据",
0,
FinData,
-1);
if(SUCCEEDED(hr))
hr = RegisterFunctionProc(
L"cwsj",
0,
FinData,
-1);
if(SUCCEEDED(hr))
hr = RegisterFunctionProc(
L"科目名称",
0,
KmName,
1);
if(SUCCEEDED(hr))
hr = RegisterFunctionProc(
L"kmmc",
0,
KmName,
1);
if (SUCCEEDED(hr))
hr = RegisterInfoProc(
F1AddInName,// Name of the add-in (defined at top of the file)
F1AddInDesc,// Description of the add-in
0, // Reserved for future use; must be 0
0); // Reserved for future use; must be 0
return hr;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?