亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? myclient.cpp

?? Chapter11-Scalability.rar com example
?? CPP
字號:
// MyClient.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

void SimpleAsyncExecution();
void CheckForCallCompletion();
void NotifyCallCompletion();
void CancelCall();

int main(int argc, char* argv[])
{
	CCPLComInitializer init;
	_Module.Init(NULL, GetModuleHandle(NULL));

	// SimpleAsyncExecution();
	// CheckForCallCompletion();
	// NotifyCallCompletion();
	CancelCall();

	_Module.Term();

	return 0;
}

void SimpleAsyncExecution()
{
	// Step 1: Create the instance
	CComPtr<IUnknown> spUnk;
	HRESULT hr = ::CoCreateInstance(__uuidof(MySum), NULL, 
		CLSCTX_SERVER, __uuidof(IMySum), (void**) &spUnk);
	_ASSERT (SUCCEEDED(hr));

	// Step 2: Get the call factory
	CComPtr<ICallFactory> spCallFactory;
	hr = spUnk->QueryInterface(&spCallFactory);
	_ASSERT (SUCCEEDED(hr));
	spUnk = NULL; // not needed anymore

	// Step 3: Get the async interface
	CComPtr<AsyncIMySum> spMySum;
	hr = spCallFactory->CreateCall(__uuidof(AsyncIMySum),
		NULL,
		__uuidof(AsyncIMySum),
		(IUnknown**) &spMySum);
	_ASSERT (SUCCEEDED(hr));
	spCallFactory = NULL; // not needed anymore

	// Step 4: Initiate the call
	hr = spMySum->Begin_GetSum(10, 20);
	_ASSERT (SUCCEEDED(hr));

	// Step 5: Get the value
	long lSum;
	hr = spMySum->Finish_GetSum(&lSum);
	_ASSERT (SUCCEEDED(hr));
	cout << "Sum is: " << lSum << endl;

	// Step 6: Clean up
	spMySum = NULL;
}

void CheckForCallCompletion()
{
	// Step 1: Create the instance
	CComPtr<IUnknown> spUnk;
	HRESULT hr = ::CoCreateInstance(__uuidof(MySum), NULL, 
		CLSCTX_SERVER, __uuidof(IMySum), (void**) &spUnk);
	_ASSERT (SUCCEEDED(hr));

	// Step 2: Get the call factory
	CComPtr<ICallFactory> spCallFactory;
	hr = spUnk->QueryInterface(&spCallFactory);
	_ASSERT (SUCCEEDED(hr));
	spUnk = NULL; // not needed anymore

	// Step 3: Get the async interface
	CComPtr<AsyncIMySum> spMySum;
	hr = spCallFactory->CreateCall(__uuidof(AsyncIMySum),
		NULL,
		__uuidof(AsyncIMySum),
		(IUnknown**) &spMySum);
	_ASSERT (SUCCEEDED(hr));
	spCallFactory = NULL; // not needed anymore

	// Step 4: Initiate the call
	hr = spMySum->Begin_GetSum(10, 20);
	_ASSERT (SUCCEEDED(hr));

	// Step 5: Check for call completion every one second
	CComPtr<ISynchronize> spSync;
	hr = spMySum->QueryInterface(&spSync);
	_ASSERT (SUCCEEDED(hr));
	for(;;) {
		Sleep(1 * 1000);
		hr = spSync->Wait(0, 0);
		if (RPC_S_CALLPENDING != hr) {
			// finished call completion. Get the value.
			break;
		}
		cout << "Call is pending" << endl;
	}

	// Step 6: Get the value
	long lSum;
	hr = spMySum->Finish_GetSum(&lSum);
	_ASSERT (SUCCEEDED(hr));
	cout << "Sum is: " << lSum << endl;

	// Step 7: Clean up
	spMySum = NULL;
}

class CMyCallNotify : 
	public ISynchronize,
	public CComObjectRootEx<CComMultiThreadModel>
{
public:
	CMyCallNotify() {}
	HRESULT Init(ICallFactory* pCallFactory);
	~CMyCallNotify() {}

DECLARE_GET_CONTROLLING_UNKNOWN ()

BEGIN_COM_MAP(CMyCallNotify)
	COM_INTERFACE_ENTRY(ISynchronize)
	COM_INTERFACE_ENTRY_AGGREGATE_BLIND (m_spUnkInner.p)
END_COM_MAP()

// ISynchronize
public:
	STDMETHOD(Wait)(ULONG dwFlags, ULONG dwMilliseconds);
	STDMETHOD(Signal)();
	STDMETHOD(Reset)();

private:
	CComPtr<ISynchronize> m_spSyncInner;
	CComPtr<IUnknown> m_spUnkInner;
};

HRESULT CMyCallNotify::Init(ICallFactory* pCallFactory)
{
	// Step 1: Create a call object.
	HRESULT hr = pCallFactory->CreateCall(__uuidof(AsyncIMySum),
		GetControllingUnknown(),
		IID_IUnknown, &m_spUnkInner);
	if (FAILED (hr)) 
		return hr;

	// Step 2: Cache a pointer to the aggregated object's ISynchronize interface.
	hr = m_spUnkInner->QueryInterface(__uuidof(ISynchronize), (void**) &m_spSyncInner);
	if (FAILED (hr)) {
		m_spUnkInner = NULL;
		return hr;
	}

	return hr;
}

STDMETHODIMP CMyCallNotify::Wait(ULONG dwFlags, ULONG dwMilliseconds)
{
	// Forward the call to the inner object
	return m_spSyncInner->Wait(dwFlags, dwMilliseconds);
}

STDMETHODIMP CMyCallNotify::Signal()
{
	// Forward the call to the inner object
	HRESULT hr = m_spSyncInner->Signal();

	// Notify the user
	cout << "Call finished." << endl;
	cout << "Press enter to fetch the sum" << endl;

	return hr;
}

STDMETHODIMP CMyCallNotify::Reset()
{
	// Forward the call to the inner object
	return m_spSyncInner->Reset();
}

void NotifyCallCompletion()
{
	// Step 1: Create the instance
	CComPtr<IUnknown> spUnk;
	HRESULT hr = ::CoCreateInstance(__uuidof(MySum), NULL, 
		CLSCTX_SERVER, __uuidof(IMySum), (void**) &spUnk);
	_ASSERT (SUCCEEDED(hr));

	// Step 2: Get the call factory
	CComPtr<ICallFactory> spCallFactory;
	hr = spUnk->QueryInterface(&spCallFactory);
	_ASSERT (SUCCEEDED(hr));
	spUnk = NULL; // not needed anymore

	// Step 3: Create our call object and initialize it
	CComPtr<CComObject<CMyCallNotify> > spMyCallObject;
	hr = CComObject<CMyCallNotify>::CreateInstance(&spMyCallObject);
	_ASSERT (SUCCEEDED(hr));
	spMyCallObject->InternalAddRef();
	hr = spMyCallObject->Init(spCallFactory);
	_ASSERT (SUCCEEDED(hr));

	// Step 4: Get the async interface
	CComPtr<AsyncIMySum> spMySum;
	hr = spMyCallObject->QueryInterface(&spMySum);
	_ASSERT (SUCCEEDED(hr));

	// Step 5: Initiate the call
	hr = spMySum->Begin_GetSum(10, 20);
	_ASSERT (SUCCEEDED(hr));
	cout << "Call started..." << endl;

	// Step 6: Wait for user to press enter
	getchar();

	// Step 7: Get the value
	long lSum;
	hr = spMySum->Finish_GetSum(&lSum);
	_ASSERT (SUCCEEDED(hr));
	cout << "Sum is: " << lSum << endl;

	// Step 8: Clean up
	spMySum = NULL;
	spMyCallObject = NULL;
}

void CancelCall()
{
	// Step 1: Create the instance
	CComPtr<IUnknown> spUnk;
	HRESULT hr = ::CoCreateInstance(__uuidof(MySum), NULL, 
		CLSCTX_SERVER, __uuidof(IMySum), (void**) &spUnk);
	_ASSERT (SUCCEEDED(hr));

	// Step 2: Get the call factory
	CComPtr<ICallFactory> spCallFactory;
	hr = spUnk->QueryInterface(&spCallFactory);
	_ASSERT (SUCCEEDED(hr));
	spUnk = NULL; // not needed anymore

	// Step 3: Get the async interface
	CComPtr<AsyncIMySum> spMySum;
	hr = spCallFactory->CreateCall(__uuidof(AsyncIMySum),
		NULL,
		__uuidof(AsyncIMySum),
		(IUnknown**) &spMySum);
	_ASSERT (SUCCEEDED(hr));
	spCallFactory = NULL; // not needed anymore

	// Step 4: Initiate the call
	hr = spMySum->Begin_GetSum(10, 20);
	_ASSERT (SUCCEEDED(hr));

	// Step 5: Cancel the call if the call takes more than a second
	CComPtr<ICancelMethodCalls> spCancel;
	hr = spMySum->QueryInterface(&spCancel);
	_ASSERT (SUCCEEDED(hr));
	spCancel->Cancel(1);

	// Step 6: Get the value
	long lSum;
	hr = spMySum->Finish_GetSum(&lSum);
	if (SUCCEEDED(hr)) {
		cout << "Sum is: " << lSum << endl;
	}else {
		cout << "Finish failed: 0x" << hex << hr << endl;
	}

	// Step 7: Clean up
	spMySum = NULL;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区综合| 欧美日韩1234| 欧美三片在线视频观看 | 欧美电视剧在线看免费| 自拍av一区二区三区| 毛片av一区二区| 色综合天天综合网国产成人综合天| 日韩欧美高清在线| 一区二区三区欧美久久| 国产成人小视频| 精品盗摄一区二区三区| 天堂久久一区二区三区| 日本高清不卡视频| 国产精品成人一区二区三区夜夜夜| 激情综合色综合久久综合| 欧美群妇大交群中文字幕| 亚洲色图都市小说| 不卡的av电影在线观看| 久久综合久久鬼色中文字| 欧美aaa在线| 欧美一区二区三区影视| 亚洲高清久久久| 欧美亚洲日本国产| 亚洲精品日日夜夜| 91极品视觉盛宴| 亚洲丝袜美腿综合| 91在线播放网址| 综合久久一区二区三区| 色诱亚洲精品久久久久久| 亚洲丝袜精品丝袜在线| 色欧美片视频在线观看在线视频| 日韩美女视频19| 色又黄又爽网站www久久| 亚洲免费av观看| 日本久久一区二区三区| 亚洲在线成人精品| 制服丝袜一区二区三区| 蜜桃视频第一区免费观看| 日韩久久久久久| 国产一区二区三区免费在线观看| 久久久亚洲精品石原莉奈| 懂色av一区二区三区免费观看| 国产精品免费久久久久| 99久久婷婷国产综合精品电影| 亚洲精品一二三区| 欧美日韩极品在线观看一区| 视频一区在线视频| 精品国精品国产尤物美女| 国产一区二区福利视频| 国产精品成人网| 精品视频在线看| 国产在线视视频有精品| 国产精品看片你懂得| 91久久精品网| 久久国产精品色| 国产精品日韩成人| 色哟哟国产精品| 欧美aⅴ一区二区三区视频| 国产亚洲欧洲997久久综合| aaa欧美大片| 亚洲第一福利一区| 久久久精品人体av艺术| 一本色道久久综合狠狠躁的推荐| 丝瓜av网站精品一区二区| 久久精品在这里| 在线精品视频小说1| 久88久久88久久久| 一区二区三区不卡视频| 日韩视频在线永久播放| av电影天堂一区二区在线观看| 亚洲一区二区三区四区在线观看| 精品国产区一区| 在线精品观看国产| 国产·精品毛片| 日韩精品成人一区二区在线| 国产嫩草影院久久久久| 91精品国产一区二区三区蜜臀 | 狠狠网亚洲精品| 亚洲品质自拍视频| 久久影院午夜片一区| 欧美性视频一区二区三区| 精品制服美女久久| 亚洲自拍偷拍综合| 国产精品伦理一区二区| 精品国产乱码91久久久久久网站| 一本久久a久久精品亚洲| 国产毛片一区二区| 天天色 色综合| 亚洲精品乱码久久久久久黑人| 久久亚洲精品小早川怜子| 91麻豆精品国产91久久久久| 一本大道久久a久久综合婷婷| 国产成人av影院| 麻豆成人久久精品二区三区小说| 亚洲国产一区二区a毛片| 亚洲欧洲av色图| 久久精品欧美日韩| 精品免费99久久| 欧美一区二区三区的| 欧美三日本三级三级在线播放| 91日韩精品一区| www.av亚洲| 成人涩涩免费视频| 国产一区二区美女诱惑| 久久99最新地址| 久久精品噜噜噜成人88aⅴ| 日韩精品高清不卡| 视频一区中文字幕| 男人的j进女人的j一区| 日韩精品一二区| 美日韩一区二区| 蜜臀久久99精品久久久画质超高清| 亚洲成av人片在线| 婷婷成人激情在线网| 日本不卡一区二区三区| 日日夜夜精品视频天天综合网| 日韩精品免费专区| 美女在线视频一区| 国产一区二区在线视频| 国产成人综合亚洲91猫咪| 国产成都精品91一区二区三| 高清不卡在线观看av| 99久久精品国产精品久久| 一本大道久久a久久综合婷婷| 在线看国产一区| 欧美情侣在线播放| 精品久久久久一区二区国产| 欧美精品一区二区三| 国产欧美视频一区二区三区| 国产精品免费网站在线观看| 亚洲摸摸操操av| 午夜精品福利一区二区三区蜜桃| 日韩成人一级大片| 国产一区二区三区在线观看精品| 从欧美一区二区三区| 在线观看免费成人| 日韩视频一区二区三区| 国产日韩欧美电影| 亚洲激情av在线| 免费欧美在线视频| 成人影视亚洲图片在线| 欧美在线观看一二区| 日韩一级视频免费观看在线| 日本一区二区成人在线| 亚洲一区国产视频| 国产一区91精品张津瑜| 91麻豆文化传媒在线观看| 欧美一区二区视频在线观看2020| 久久久美女毛片| 亚洲在线免费播放| 国产精品亚洲视频| 欧美日韩精品一区二区三区| 久久综合av免费| 亚洲成人一区在线| 成人动漫一区二区| 日韩久久久精品| 亚洲另类一区二区| 国产精品一区在线观看你懂的| 一本大道久久精品懂色aⅴ| www国产亚洲精品久久麻豆| 亚洲最大色网站| 国产麻豆成人传媒免费观看| 欧美性大战久久久久久久 | 2024国产精品| 亚洲成av人影院在线观看网| 国产精品一区久久久久| 欧美精品日韩一本| 亚洲精品国产一区二区精华液| 国产一区二区调教| 日韩一区二区麻豆国产| 亚洲最快最全在线视频| 不卡av电影在线播放| 欧美tk丨vk视频| 日韩高清中文字幕一区| 99视频一区二区| 国产欧美精品一区aⅴ影院| 蜜桃av一区二区| 在线不卡a资源高清| 亚洲一区中文日韩| 一本大道久久精品懂色aⅴ| 中文av字幕一区| 国产精品一区二区男女羞羞无遮挡| 欧美三级三级三级爽爽爽| 一区二区三区在线观看视频| 99久久99久久综合| 中文字幕在线一区| 成人av免费在线| 中文字幕制服丝袜一区二区三区| 国产一区二区三区电影在线观看| 日韩午夜激情av| 日韩avvvv在线播放| 欧美一区二区三区四区久久| 首页亚洲欧美制服丝腿| 欧美剧情电影在线观看完整版免费励志电影 | 久久国产乱子精品免费女| 欧美一级理论片| 麻豆国产欧美日韩综合精品二区| 91精品欧美久久久久久动漫 | 在线观看91精品国产入口| 一区二区三区自拍|