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

📄 cmyjscripthost.h

📁 《脚本驱动的应用软件开发方法与实践》源码
💻 H
字号:
//
// CMyJScriptHost.h
//
// --------------------------------------------------------
// A Practical Guide to Script-Driven Software Development
// Author: Qiming Lu                        Date: 6/1/2006
// MSN Messager: luqiming26@hotmail.com
// MSN Blog: http://spaces.msn.com/jemylu
// --------------------------------------------------------

#ifndef __H_CMyJScriptHost__
#define __H_CMyJScriptHost__

#include "activscp.h"

//#define __Script_Debug__

#ifdef __Script_Debug__
#include "activdbg.h"
#endif 

class CApplicationWrapper;

class CMyJScriptHost : public IActiveScriptSite
			#ifdef __Script_Debug__
					 , public IActiveScriptSiteDebug
			#endif
{
public:
	CMyJScriptHost();
	~CMyJScriptHost();

	bool Initialize();
	void Finalize();
	void Execute(wchar_t* scripts);

	// --- IUnknown methods ---
	HRESULT STDMETHODCALLTYPE QueryInterface( /* [in] */ REFIID riid,
		/* [out] */ void  **ppvObject ); 
	ULONG STDMETHODCALLTYPE AddRef();
	ULONG STDMETHODCALLTYPE Release();

	// --- IActiveScriptSite methods ---
	STDMETHODIMP GetLCID(LCID * plcid);
	STDMETHODIMP GetItemInfo(LPCOLESTR pstrName, DWORD dwReturnMask, 
		IUnknown **ppunkItem, ITypeInfo **ppTypeInfo);
	STDMETHODIMP GetDocVersionString(BSTR *pbstrVersionString);
	STDMETHODIMP OnScriptTerminate(const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo);
	STDMETHODIMP OnStateChange(SCRIPTSTATE ssScriptState);
	STDMETHODIMP OnScriptError(IActiveScriptError *pase);
	STDMETHODIMP OnEnterScript(void);
	STDMETHODIMP OnLeaveScript(void);

#ifdef __Script_Debug__
	// --- IActiveScriptSiteDebug methods ---
	STDMETHODIMP GetDocumentContextFromPosition(/*[in]*/ DWORD dwSourceContext,
		/*[in]*/ ULONG uCharacterOffset, /*[in]*/ ULONG uNumChars,
		/*[out]*/ IDebugDocumentContext** ppsc); 
	STDMETHODIMP GetApplication(/*[out]*/ IDebugApplication **ppda);
	STDMETHODIMP GetRootApplicationNode(/*[out]*/ IDebugApplicationNode** ppdanRoot); 
	STDMETHODIMP OnScriptErrorDebug(/*[in]*/ IActiveScriptErrorDebug *pErrorDebug,
		/*[out]*/ BOOL *pfEnterDebugger,/*[out]*/ BOOL *pfCallOnScriptErrorWhenContinuing);
#endif 

private:
	long				m_cRef;				// COM reference count

	bool				mInited;
	ITypeLib *			mTypeLib;			// Type library for scripting APIs' dispatch
	IActiveScript *		mActiveScript;		// JScript Engine
	IActiveScriptParse*	mActiveScriptParse;	// Script parser

	// Components
	CApplicationWrapper*	mApplication;


	// For script debugging...
#ifdef __Script_Debug__
	IProcessDebugManager*	mpDebugMgr;
	IDebugApplication*		mpDebugApp;
	IDebugDocumentHelper*	mpDebugDoc;
	DWORD					mAppCookie;

	HRESULT CreateScriptDebugger();
	void ReleaseScriptDebugger();
	HRESULT CreateDocumentForDebugger(BSTR scripts);
	void ReleaseDebugDocument();
#endif
};

#endif // __H_CMyJScriptHost__

⌨️ 快捷键说明

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