打印机OPOS驱动开发 - 02 - 添加接口和基础调试

这一步只添加基本的接口,并把接口名称调试出来,具体实现后续再做。先要把流程走通之后,再逐步迭代。

在SSOPOSServiceObjectPOSPrinter.idl文件里的ISOPOSPrinter下面添加如下接口:

interface ISOPOSPrinter : IDispatch{
	[id(201)] HRESULT Open([in] BSTR DeviceName, [out, retval] LONG* pRC);
	[id(202)] HRESULT Close([out, retval] LONG* pRC);
	[id(203)] HRESULT ClaimDevice([in] LONG Timeout, [out, retval] LONG* pRC);
	[id(204)] HRESULT ReleaseDevice([out, retval] LONG* pRC);
	[id(205)] HRESULT CheckHealth([in] LONG Level, [out, retval] LONG* pRC);
	[id(206)] HRESULT ClearInput([out, retval] LONG* pRC);
	[id(207)] HRESULT ClearInputProperties([out, retval] LONG* pRC);
	[id(208)] HRESULT ClearOutput([out, retval] LONG* pRC);
	[id(209)] HRESULT DirectIO([in] LONG Command, [in] LONG* pData, [in] BSTR* pString, [out, retval] LONG* pRC);
	[id(210)] HRESULT CompareFirmwareVersion([in] BSTR FirmwareFileName, [in] LONG* pResult, [out, retval] LONG* pRC);
	[id(211)] HRESULT ResetStatistics([in] BSTR StatisticsBuffer, [out, retval] LONG* pRC);
	[id(212)] HRESULT RetrieveStatistics([in] BSTR* pStatisticsBuffer, [out, retval] LONG* pRC);
	[id(213)] HRESULT UpdateFirmware([in] BSTR FirmwareFileName, [out, retval] LONG* pRC);
	[id(214)] HRESULT UpdateStatistics([in] BSTR StatisticsBuffer, [out, retval] LONG* pRC);
	[id(215), helpstring("Use ClaimDevice")] HRESULT Claim([in] LONG nTimeout, [out, retval] LONG* pRC);
	//[id(216), helpstring("Use ReleaseDevice")] HRESULT Release([out, retval] LONG* pRC);
	[id(217)] HRESULT BeginInsertion([in] LONG Timeout, [out, retval] LONG* pRC);
	[id(218)] HRESULT BeginRemoval([in] LONG Timeout, [out, retval] LONG* pRC);
	[id(219)] HRESULT ChangePrintSide([in] LONG Side, [out, retval] LONG* pRC);
	[id(220)] HRESULT ClearPrintArea([out, retval] LONG* pRC);
	[id(221)] HRESULT CutPaper([in] LONG Percentage, [out, retval] LONG* pRC);
	[id(222)] HRESULT DrawRuledLine([in] LONG Station, [in] BSTR PositionList, [in] LONG LineDirection, [in] LONG LineWidth, [in] LONG LineStyle, [in] LONG LineColor, [out, retval] LONG* pRC);
	[id(223)] HRESULT EndInsertion([out, retval] LONG* pRC);
	[id(224)] HRESULT EndRemoval([out, retval] LONG* pRC);
	[id(225)] HRESULT MarkFeed([in] LONG Type, [out, retval] LONG* pRC);
	[id(226)] HRESULT PageModePrint([in] LONG Control, [out, retval] LONG* pRC);
	[id(227)] HRESULT PrintBarCode([in] LONG Station, [in] BSTR Data, [in] LONG Symbology, [in] LONG Height, [in] LONG Width, [in] LONG Alignment, [in] LONG TextPosition, [out, retval] LONG* pRC);
	[id(228)] HRESULT PrintBitmap([in] LONG Station, [in] BSTR FileName, [in] LONG Width, [in] LONG Alignment, [out, retval] LONG* pRC);
	[id(229)] HRESULT PrintImmediate([in] LONG Station, [in] BSTR Data, [out, retval] LONG* pRC);
	[id(230)] HRESULT PrintMemoryBitmap([in] LONG Station, [in] BSTR Data, [in] LONG Type, [in] LONG Width, [in] LONG Alignment, [out, retval] LONG* pRC);
	[id(231)] HRESULT PrintNormal([in] LONG Station, [in] BSTR Data, [out, retval] LONG* pRC);
	[id(232)] HRESULT PrintTwoNormal([in] LONG Station, [in] BSTR Data1, [in] BSTR Data2, [out, retval] LONG* pRC);
	[id(233)] HRESULT RotatePrint([in] LONG Station, [in] LONG Rotation, [out, retval] LONG* pRC);
	[id(234)] HRESULT SetBitmap([in] LONG BitmapNumber, [in] LONG Station, [in] BSTR FileName, [in] LONG Width, [in] LONG Alignment, [out, retval] LONG* pRC);
	[id(235)] HRESULT SetLogo([in] LONG Location, [in] BSTR Data, [out, retval] LONG* pRC);
	[id(236)] HRESULT TransactionPrint([in] LONG Station, [in] LONG Control, [out, retval] LONG* pRC);
	[id(237)] HRESULT ValidateData([in] LONG Station, [in] BSTR Data, [out, retval] LONG* pRC);
	[id(238)] HRESULT COFreezeEvents([in] VARIANT_BOOL Freeze, [out, retval] LONG* pRC);
	[id(239)] HRESULT GetPropertyNumber([in] LONG PropIndex, [out, retval] LONG* pRC);
	[id(240)] HRESULT SetPropertyNumber([in] LONG PropIndex, [in] LONG Number);
	[id(241)] HRESULT GetPropertyString([in] LONG PropIndex, [out, retval] BSTR* pRC);
	[id(242)] HRESULT SetPropertyString([in] LONG PropIndex, [in] BSTR StrVal);
	[id(243)] HRESULT OpenService([in] BSTR DeviceClass, [in] BSTR DeviceName, [in] IDispatch* pDispatch, [out, retval] LONG* pRC);
	[id(244)] HRESULT CloseService([out, retval] LONG* pRC);
};

在SOPOSPrinter.h文件里的CSOPOSPrinter类里面添加如下接口:

// ISOPOSPrinter
public:
	STDMETHOD(Open)(BSTR DeviceName, LONG* pRC);
	STDMETHOD(Close)(LONG* pRC);
	STDMETHOD(ClaimDevice)(LONG nTimeout, LONG* pRC);
	STDMETHOD(ReleaseDevice)(LONG* pRC);
	STDMETHOD(CheckHealth)(LONG Level, LONG* pRC);
	STDMETHOD(ClearInput)(LONG* pRC);
	STDMETHOD(ClearInputProperties)(LONG* pRC);
	STDMETHOD(ClearOutput)(LONG* pRC);
	STDMETHOD(DirectIO)(LONG Command, LONG* pData, BSTR* pString, LONG* pRC);
	STDMETHOD(CompareFirmwareVersion)(BSTR FirmwareFileName, LONG* pResult, LONG* pRC);
	STDMETHOD(ResetStatistics)(BSTR StatisticsBuffer, LONG* pRC);
	STDMETHOD(RetrieveStatistics)(BSTR* pStatisticsBuffer, LONG* pRC);
	STDMETHOD(UpdateFirmware)(BSTR FirmwareFileName, LONG* pRC);
	STDMETHOD(UpdateStatistics)(BSTR StatisticsBuffer, LONG* pRC);
	STDMETHOD(Claim)(LONG nTimeout, LONG* pRC);
	STDMETHOD(Release)(LONG* pRC);
	STDMETHOD(BeginInsertion)(LONG nTimeout, LONG* pRC);
	STDMETHOD(BeginRemoval)(LONG nTimeout, LONG* pRC);
	STDMETHOD(ChangePrintSide)(LONG Side, LONG* pRC);
	STDMETHOD(ClearPrintArea)(LONG* pRC);
	STDMETHOD(CutPaper)(LONG Percentage, LONG* pRC);
	STDMETHOD(DrawRuledLine)(LONG Station, BSTR PositionList, LONG LineDirection, LONG LineWidth, LONG LineStyle, LONG LineColor, LONG* pRC);
	STDMETHOD(EndInsertion)(LONG* pRC);
	STDMETHOD(EndRemoval)(LONG* pRC);
	STDMETHOD(MarkFeed)(LONG nType, LONG* pRC);
	STDMETHOD(PageModePrint)(LONG nControl, LONG* pRC);
	STDMETHOD(PrintBarCode)(LONG Station, BSTR pData, LONG Symbology, LONG Height, LONG Width, LONG Alignment, LONG TextPosition, LONG* pRC);
	STDMETHOD(PrintBitmap)(LONG Station, BSTR FileName, LONG Width, LONG Alignment, LONG* pRC);
	STDMETHOD(PrintImmediate)(LONG Station, BSTR pData, LONG* pRC);
	STDMETHOD(PrintMemoryBitmap)(LONG Station, BSTR pData, LONG nType, LONG Width, LONG Alignment, LONG* pRC);
	STDMETHOD(PrintNormal)(LONG Station, BSTR pData, LONG* pRC);
	STDMETHOD(PrintTwoNormal)(LONG Station, BSTR pData1, BSTR pData2, LONG* pRC);
	STDMETHOD(RotatePrint)(LONG Station, LONG Rotation, LONG* pRC);
	STDMETHOD(SetBitmap)(LONG BitmapNumber, LONG Station, BSTR FileName, LONG Width, LONG Alignment, LONG* pRC);
	STDMETHOD(SetLogo)(LONG Location, BSTR pData, LONG* pRC);
	STDMETHOD(TransactionPrint)(LONG Station, LONG nControl, LONG* pRC);
	STDMETHOD(ValidateData)(LONG Station, BSTR pData, LONG* pRC);
	STDMETHOD(COFreezeEvents)(VARIANT_BOOL Freeze, LONG* pRC);
	STDMETHOD(GetPropertyNumber)(LONG PropIndex, LONG* pRC);
	STDMETHOD(SetPropertyNumber)(LONG PropIndex, LONG Number);
	STDMETHOD(GetPropertyString)(LONG PropIndex, BSTR* pRC);
	STDMETHOD(SetPropertyString)(LONG PropIndex, BSTR StrVal);
	STDMETHOD(OpenService)(BSTR DeviceClass, BSTR DeviceName, IDispatch* pDispatch, LONG* pRC);
	STDMETHOD(CloseService)(LONG* pRC);

在SOPOSPrinter.cpp文件里添加接口实现(目前仅调试)如下所示:

STDMETHODIMP CSOPOSPrinter::Open(BSTR DeviceName, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::Close(LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::ClaimDevice(LONG nTimeout, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	*pRC = OPOS_SUCCESS;

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::ReleaseDevice(LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	*pRC = OPOS_SUCCESS;

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::CheckHealth(LONG Level, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::ClearInput(LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::ClearInputProperties(LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::ClearOutput(LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::DirectIO(LONG Command, LONG* pData, BSTR* pString, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::CompareFirmwareVersion(BSTR FirmwareFileName, LONG* pResult, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::ResetStatistics(BSTR StatisticsBuffer, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::RetrieveStatistics(BSTR* pStatisticsBuffer, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::UpdateFirmware(BSTR FirmwareFileName, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::UpdateStatistics(BSTR StatisticsBuffer, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::Claim(LONG nTimeout, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	*pRC = OPOS_SUCCESS;

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::Release(LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::BeginInsertion(LONG nTimeout, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::BeginRemoval(LONG nTimeout, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::ChangePrintSide(LONG Side, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::ClearPrintArea(LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


//切纸,需要支持TransactionPrint和AsyncMode
STDMETHODIMP CSOPOSPrinter::CutPaper(LONG Percentage, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::DrawRuledLine(LONG Station, BSTR PositionList, LONG LineDirection, LONG LineWidth, LONG LineStyle, LONG LineColor, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::EndInsertion(LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::EndRemoval(LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::MarkFeed(LONG nType, LONG* pRC)
{
	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


//页模式打印,需要支持TransactionPrint和AsyncMode
STDMETHODIMP CSOPOSPrinter::PageModePrint(LONG nControl, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


//打印条码,需要支持TransactionPrint和AsyncMode
STDMETHODIMP CSOPOSPrinter::PrintBarCode(LONG Station, BSTR pData, LONG Symbology, LONG Height, LONG Width, LONG Alignment, LONG TextPosition, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


//打印位图,需要支持TransactionPrint和AsyncMode,页模式和标准模式命令不同
STDMETHODIMP CSOPOSPrinter::PrintBitmap(LONG Station, BSTR FileName, LONG Width, LONG Alignment, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::PrintImmediate(LONG Station, BSTR pData, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::PrintMemoryBitmap(LONG Station, BSTR pData, LONG nType, LONG Width, LONG Alignment, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


//打印文本,需要支持TransactionPrint和AsyncMode
STDMETHODIMP CSOPOSPrinter::PrintNormal(LONG Station, BSTR pData, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::PrintTwoNormal(LONG Station, BSTR pData1, BSTR pData2, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


//旋转打印,需要支持TransactionPrint和AsyncMode
STDMETHODIMP CSOPOSPrinter::RotatePrint(LONG Station, LONG Rotation, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


//下载位图,后续可通过PrintNormal打印
STDMETHODIMP CSOPOSPrinter::SetBitmap(LONG BitmapNumber, LONG Station, BSTR FileName, LONG Width, LONG Alignment, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::SetLogo(LONG Location, BSTR pData, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


//事务模式,需要考虑AsyncMode
STDMETHODIMP CSOPOSPrinter::TransactionPrint(LONG Station, LONG nControl, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::ValidateData(LONG Station, BSTR pData, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::COFreezeEvents(VARIANT_BOOL Freeze, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::GetPropertyNumber(LONG PropIndex, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::SetPropertyNumber(LONG PropIndex, LONG Number)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::GetPropertyString(LONG PropIndex, BSTR* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


//只读属性不可以设置
STDMETHODIMP CSOPOSPrinter::SetPropertyString(LONG PropIndex, BSTR StrVal)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::OpenService(BSTR DeviceClass, BSTR DeviceName, IDispatch* pDispatch, LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA("CSOPOSPrinter 20240309.001");
	OutputDebugStringA(__FUNCTION__);

	//保存pDispatch用于后续产生事件

	*pRC = OPOS_SUCCESS;

	return S_OK;
}


STDMETHODIMP CSOPOSPrinter::CloseService(LONG* pRC)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO:  
	OutputDebugStringA(__FUNCTION__);

	*pRC = OPOS_SUCCESS;

	return S_OK;
}

到目前为止,也应该能编译成功。

备注:

OPOS_SUCCESS 为 0

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wyjuan

给孩子赚点奶粉钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值