⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 accountmgr.cpp

📁 Chapter08-Transactions.rar com example
💻 CPP
字号:
// AccountMgr.cpp : Implementation of CAccountMgmtApp and DLL registration.

#include "StdAfx.h"
#include "AccountMgmt.h"
#include "AccountMgr.h"
#import "../TextFileDB/TextFileDB.tlb" no_namespace

CAccountMgr::CAccountMgr()
{

}

CAccountMgr::~CAccountMgr()
{

}

STDMETHODIMP CAccountMgr::InterfaceSupportsErrorInfo(REFIID riid)
{
	static const IID* arr[] = 
	{
		&IID_IAccountMgr,
	};

	for (int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
	{
		if (::InlineIsEqualGUID(*arr[i],riid))
			return S_OK;
	}
	return S_FALSE;
}

STDMETHODIMP CAccountMgr::Debit(BSTR bsClient, long lAmount)
{
	CComPtr<IContextState> spState;
	HRESULT hr = ::CoGetObjectContext(__uuidof(IContextState), (void**) &spState);
	if (FAILED(hr)) {
		return hr;
	}

	try {
		IMyFileDBPtr spConn(__uuidof(MyFileDB));
		spConn->Open("W:/Dev/Chapter08-Transactions/04/TextFileDB/Test/Accounts.txt");
		long lCurrentBalance = spConn->GetBalance(bsClient);
		if (lCurrentBalance < lAmount) {
			spState->SetMyTransactionVote(TxAbort);
			return Error(_T("Not enough balance"), GUID_NULL, E_FAIL);
		}
		long lNewBalance = lCurrentBalance - lAmount;
		spConn->UpdateBalance(bsClient, lNewBalance);
	}
	catch(_com_error& e) {
		spState->SetMyTransactionVote(TxAbort);
		return Error(static_cast<LPCTSTR>(e.Description()), GUID_NULL, e.Error());
	}

	spState->SetMyTransactionVote(TxCommit);
	return S_OK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -