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

📄 ccar.h

📁 《脚本驱动的应用软件开发方法与实践》源代码下载
💻 H
字号:
//
// CCar.h
//

#ifndef __H_CCar__
#define __H_CCar__

#include "IDispatchImpl.h"
#include "js_demo_h.h"
#include "IDispatchArrayImpl.h"

class CEngine;
class CWheelArray;

class CCar : public IDispatchImpl<CCar
								, ICar
								, &IID_ICar>
{
public:
	CCar(ITypeLib* ptl);
	~CCar();

	// APIs exposed to scripts
	STDMETHODIMP get_engine(IDispatch** ppdisp);
	STDMETHODIMP get_wheels(IDispatch** ppdisp);

	STDMETHODIMP createWheel(BSTR brand, BSTR color, IDispatch** ppdisp);
	STDMETHODIMP installWheel(IDispatch* pdisp, UINT index);
	STDMETHODIMP installWheel2(VARIANT pVar, UINT index);
	STDMETHODIMP createEnhancedWheel(BSTR brand, BSTR color, IDispatch** ppdisp);
	STDMETHODIMP createDynamicWheel(BSTR brand, BSTR color, IDispatch** ppdisp);

private:
	CEngine*		mEngine;
	CWheelArray*	mWheelArray;
};


class CEngine : public IDispatchImpl<CEngine
									, IEngine
									, &IID_IEngine>
{
public:
	CEngine(ITypeLib* ptl);
	~CEngine();

	// APIs exposed to scripts
	STDMETHODIMP get_brand(BSTR* pVal);
	STDMETHODIMP run();
};


class CWheel : public IDispatchImpl<CWheel
								, IWheel
								, &IID_IWheel>
{
public:
	CWheel(ITypeLib* ptl, BSTR brand, BSTR color);
	~CWheel();

	// APIs exposed to scripts
	STDMETHODIMP get_brand(BSTR* pVal);
	STDMETHODIMP get_color(BSTR* pVal);

	STDMETHODIMP rotate();
	STDMETHODIMP adjustParameters(BSTR param1, UINT param2, UINT param3);

private:
	BSTR		mBrand;
	BSTR		mColor;
};


class CWheelArray : public IDispatchArrayImpl<CWheelArray
											, IJSArray
											, CWheel
											, &IID_IJSArray>
{
public:
	CWheelArray(ITypeLib* ptl);
	~CWheelArray();

	// --- IJSArray methods ---
	STDMETHODIMP get_length(UINT* value);

protected:
	virtual CWheel* CreateElementInstance(UINT index);
	virtual void DeleteElementInstance(CWheel* pElem);
	virtual HRESULT getNthElement(UINT index, VARIANT* value);

private:
	typedef CWheel* WheelPointer;
	WheelPointer*		mpWheels;	
};


#include "IDispatchImpl2.h"

class CEnhancedWheel : public IDispatchImpl2<CEnhancedWheel
										, IEnhancedWheel
										, &IID_IEnhancedWheel>
{
	typedef IDispatchImpl2<CEnhancedWheel, IEnhancedWheel, &IID_IEnhancedWheel> __base;

public:
	CEnhancedWheel(ITypeLib* ptl, BSTR brand, BSTR color);
	~CEnhancedWheel();

	// --- IJSObject methods ---
	
	#define __ENHANCED__

	// Give more detailed info
	STDMETHODIMP toString(BSTR* value)
	{
#ifdef __ENHANCED__
		*value = ::SysAllocString(L"[object EnhancedWheel]");
		return S_OK;
#else
		return __base::toString(value);
#endif
	}

	// APIs exposed to scripts
	STDMETHODIMP get_brand(BSTR* pVal);
	STDMETHODIMP get_color(BSTR* pVal);

	STDMETHODIMP rotate();
	STDMETHODIMP adjustParameters(BSTR param1, UINT param2, UINT param3);

private:
	BSTR		mBrand;
	BSTR		mColor;
};


#include "IDispatchExImpl.h"

class CDynamicWheel : public IDispatchExImpl<CDynamicWheel
										, IDynamicWheel
										, &IID_IDynamicWheel>
{
//	typedef IDispatchExImpl<CDynamicWheel, IDynamicWheel, &IID_IDynamicWheel> __base;

public:
	CDynamicWheel(ITypeLib* ptl, BSTR brand, BSTR color);
	~CDynamicWheel();

	// APIs exposed to scripts
	STDMETHODIMP get_brand(BSTR* pVal);
	STDMETHODIMP get_color(BSTR* pVal);

	STDMETHODIMP rotate();
	STDMETHODIMP adjustParameters(BSTR param1, UINT param2, UINT param3);

private:
	BSTR		mBrand;
	BSTR		mColor;
};

#endif // __H_CCar__

⌨️ 快捷键说明

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