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

📄 stopwatchclient.cpp

📁 没有什么可以说的 自己看
💻 CPP
字号:
#include "iostream.h"
#include ".\timers\Stopwatch.h"
#include ".\timers\timers_i.c"
#include ".\timers\StopwatchClassFactory.h"

#define TIMERSDLL "..\\timers\\debug\\Timers.DLL"


typedef HRESULT (_stdcall *DLLGETCLASSOBJECT)(REFCLSID rclsid, REFIID riid,LPVOID* ppv);
typedef HRESULT (_stdcall *DLLCANUNLOADNOW)(VOID);

HINSTANCE hinstDll;


HRESULT CreateInstance(REFCLSID rclsid, REFIID riid,void** ppv)
{
	HRESULT hr=E_FAIL;
	DLLGETCLASSOBJECT DllGetClassObject;
	IClassFactory *pClassFactory;
	
	hinstDll = LoadLibrary(TIMERSDLL);
	
	if (hinstDll==NULL)
		::cout<<"Unable to load\""TIMERSDLL"\""<<  ::endl;
	else
	{
		DllGetClassObject=(DLLGETCLASSOBJECT)GetProcAddress(hinstDll,"DllGetClassObject");
		if (DllGetClassObject!=NULL)
		{
			hr=DllGetClassObject(rclsid,IID_IClassFactory,(void**)&pClassFactory);
			
			if (FAILED(hr)) ::cout<<"DllGetClassObject错了!!"<<::endl;

			if(SUCCEEDED(hr))
			{
				hr=pClassFactory->CreateInstance(NULL,riid,ppv);
				pClassFactory->Release();
			}
			pClassFactory=NULL;
		}
	
	}
	return hr;
}

void UnloadDll()
{
	DLLCANUNLOADNOW DllCanUnloadNow;
	DllCanUnloadNow =(DLLCANUNLOADNOW)GetProcAddress(hinstDll,"DllCanUnloadNow");
	if (DllCanUnloadNow!=NULL)
	{
		if((DllCanUnloadNow())==S_OK)
			FreeLibrary(hinstDll);
	}
}


void UseStopwatch(IStopwatch* const pStopwatch)
{
	float nElapsedTime;
	pStopwatch->Start();
	pStopwatch->ElapsedTime(&nElapsedTime);

	::cout<<"The overhead time is" << nElapsedTime<< ::endl;
}



int main(int argc,char *argv[])
{

	//float nElapsedTime;
	HRESULT hr;
	IUnknown* pIUnknown=NULL;
	IUnknown* pIUnknown2=NULL;
	IStopwatch* pStopwatch=NULL;
	
	hr=CreateInstance(CLSID_Stopwatch,IID_IUnknown,(void**)&pIUnknown);

	if(!SUCCEEDED(hr))
		::cout<<"ERROR:Unable to create Stopwatch!!! And I don't know why!!!";
	
	else
	{
		pIUnknown2=pIUnknown;
		
		hr=pIUnknown2->QueryInterface(IID_IStopwatch,(void**)&pStopwatch);
		if(!SUCCEEDED(hr))
			::cout<<"ERROR:Unable to retrieve Stopwatch interface!!!";
		else
		{
			UseStopwatch(pStopwatch);
			pStopwatch->Release();
			pStopwatch=NULL;
		}
		pIUnknown->Release();
	}
	UnloadDll();
	return 0;
}

⌨️ 快捷键说明

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