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

📄 trademgr.cpp

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

#include "stdafx.h"
#include "TradeMgmt.h"
#include "TradeMgr.h"
#include <comsvcs.h>

#import "..\StockExchange\StockExchange.tlb"
using namespace STOCKEXCHANGELib;

#import "..\AccountMgmt\AccountMgmt.tlb"
using namespace ACCOUNTMGMTLib;

#define CHECKHR(hr) \
   { if (FAILED(hr)) _com_issue_error(hr ); }

/////////////////////////////////////////////////////////////////////////////
//
CTradeMgr::CTradeMgr()
{
}

CTradeMgr::~CTradeMgr()
{
}

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

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

STDMETHODIMP CTradeMgr::BuyStocks(BSTR bsClient, BSTR bsSymbol, long lShares)
{
	CComPtr<IContextState> spState;
	HRESULT hr = ::CoGetObjectContext(__uuidof(IContextState), (void**) &spState);
	if (FAILED(hr)) {
		return hr;
	}

	try {
		//
		// First operation - Obtain the stocks.
		//
		IStockMgrPtr spStockMgr(__uuidof(StockMgr));
		long lAmount = spStockMgr->BuyStock(bsSymbol, lShares);
		
		//
		// Second operation - Debit the clien't account balance
		//
		IAccountMgrPtr spAccountMgr(__uuidof(AccountMgr));
		spAccountMgr->Debit(bsClient, lAmount);
	}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 + -