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

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

?? scriptenginefactory.cpp

?? 一個很不錯的Script解釋器
?? CPP
字號:
// ScriptEngineFactory.cpp: implementation of the ScriptEngineFactory class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ScriptEngineFactory.h"

#include "ExposedObject.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ScriptEngineFactory* ScriptEngineFactory::m_Instance = NULL;

ScriptEngineFactory::ScriptEngineFactory()
{
	m_iActiveScript           = NULL;
	m_iActiveScriptParse      = NULL;
	m_pScriptDispatch         = NULL;
}

ScriptEngineFactory::~ScriptEngineFactory()
{
}

ScriptEngineFactory* ScriptEngineFactory::Instance()
{
	if (m_Instance == NULL) {
		// Initialize singleton
		m_Instance = new ScriptEngineFactory;
	}

	return m_Instance;
}

BOOL ScriptEngineFactory::HRVerify(HRESULT hr, CString msg)
{
	// If we have a failure, add the error string including
	// hr value to the errormessages array of the scriptsite
	if (FAILED(hr)) {
		CString		str;

		str.Format("COM Error: 0x%08lx\n", hr);
		str += msg;
		m_ScriptSite.m_ErrorMessages.Add(msg);

		return FALSE;
	}

	return TRUE;
}

void ScriptEngineFactory::AddExposedObjectPtr(CString newObjectName, IUnknown* newExposedObject)
{
	USES_CONVERSION;

	HRESULT				hr;
	CString				str;
	ExposedObject*		pObj = NULL;

	// Add to namespace
	hr = m_iActiveScript->AddNamedItem(
		T2OLE(newObjectName), 
		SCRIPTITEM_ISVISIBLE | SCRIPTITEM_ISSOURCE);
	str.Format("Could not add Exposed-Script-Object [%s]", newObjectName);
	HRVerify(hr, str);

	// Save IUnknown ptr ...
	pObj = new ExposedObject;
	pObj->SetExposedObject(newExposedObject);
	pObj->SetObjectName(newObjectName);

	m_ScriptSite.m_ExposedObjects.Add(pObj);
}

void ScriptEngineFactory::InitializeScriptEngine()
{
	int			index;
	HRESULT		hr;
	CLSID		clsid;
	CString		intMessage, extMessage;

	// Initialize the scripting engine, for now we will use VBScript
	// Remove any error messages
	m_ScriptSite.m_ErrorMessages.RemoveAll();

	// Find CLSID
	hr = CLSIDFromProgID(L"VBScript", &clsid);
	if (HRVerify(hr, "Scripting Engine (VBScript.dll) not registered") == FALSE) {
		return;
	}

	// Start VBScript.dll (inproc server)
	hr = CoCreateInstance(
		clsid, NULL, CLSCTX_INPROC_SERVER, 
		IID_IActiveScript, (void**) &m_iActiveScript);
	if (HRVerify(hr, "Scripting Engine (VBScript.dll) not started") == FALSE) {
		return;
	}

	// QueryInterface for IActiveScriptParse
	hr = m_iActiveScript->QueryInterface(
		IID_IActiveScriptParse, (void**) &m_iActiveScriptParse);
	if (HRVerify(hr, "Scripting Engine Parser not available") == FALSE) {
		m_iActiveScript->Release();

		m_iActiveScriptParse = NULL;
		m_iActiveScript      = NULL;
		m_pScriptDispatch    = NULL;

		return;
	}

	// Setup our ScriptSite
	hr = m_iActiveScript->SetScriptSite(&m_ScriptSite);
	if (HRVerify(hr, "Could not host scripting site") == FALSE) {
		m_iActiveScript->Release();
		m_iActiveScriptParse->Release();

		m_iActiveScriptParse = NULL;
		m_iActiveScript      = NULL;
		m_pScriptDispatch    = NULL;

		return;
	}

	hr = m_iActiveScriptParse->InitNew();
	if (HRVerify(hr, "Could not initialize scripting parser") == FALSE) {
		m_iActiveScript->Release();
		m_iActiveScriptParse->Release();

		m_iActiveScriptParse = NULL;
		m_iActiveScript      = NULL;
		m_pScriptDispatch    = NULL;

		return;
	}

	// Initialize m_pScriptDispatch to NULL
	m_pScriptDispatch = NULL;

	// Empty exposed objects array
	for (index = 0; index < m_ScriptSite.m_ExposedObjects.GetSize(); index ++) {
		delete m_ScriptSite.m_ExposedObjects[index];
	}
	m_ScriptSite.m_ExposedObjects.RemoveAll();

	// Set the application main window as ScriptWindow parent
	m_ScriptSite.m_hWnd = ::AfxGetMainWnd()->m_hWnd;
}

BOOL ScriptEngineFactory::RunScript(CString newScript)
{
	HRESULT		hr;
	EXCEPINFO	ei;
	BSTR		pParseText = newScript.AllocSysString();

	// Add script code to the engine
	hr = m_iActiveScriptParse->ParseScriptText(
		pParseText, NULL, NULL, NULL, 0, 0, 0L, NULL, &ei);
	if (HRVerify(hr, "Error parsing script text") == FALSE) {
		hr = m_iActiveScriptParse->Release();
		hr = m_iActiveScript->Release();

		m_iActiveScriptParse = NULL;
		m_iActiveScript      = NULL;
		m_pScriptDispatch    = NULL;

		return FALSE;
	}

	// This will actually run the script
	hr = m_iActiveScript->SetScriptState(SCRIPTSTATE_CONNECTED);
	if (HRVerify(hr, "Error running the script") == FALSE) {
		hr = m_iActiveScriptParse->Release();
		hr = m_iActiveScript->Release();

		m_iActiveScriptParse = NULL;
		m_iActiveScript      = NULL;
		m_pScriptDispatch    = NULL;

		return FALSE;
	}

	// This will disconnect the script
	hr = m_iActiveScriptParse->Release();
	hr = m_iActiveScript->Release();

	m_iActiveScriptParse = NULL;
	m_iActiveScript      = NULL;
	m_pScriptDispatch    = NULL;
	
	return TRUE;
}

CStringArray* ScriptEngineFactory::GetErrorMessages()
{
	return &m_ScriptSite.m_ErrorMessages;
}

BOOL ScriptEngineFactory::LoadScript(CString newScript)
{
	HRESULT		hr;
	EXCEPINFO	ei;
	BSTR		pParseText = newScript.AllocSysString();

	// This loads the script and keeps it around for the user
	// to allow to call specific methods in the script
	// Add script code to the engine
	hr = m_iActiveScriptParse->ParseScriptText(
		pParseText, NULL, NULL, NULL, 0, 0, 0L, NULL, &ei);
	if (HRVerify(hr, "Error parsing script text") == FALSE) {
		hr = m_iActiveScriptParse->Release();
		hr = m_iActiveScript->Release();

		m_iActiveScriptParse = NULL;
		m_iActiveScript      = NULL;
		m_pScriptDispatch    = NULL;

		return FALSE;
	}

	// This will actually run the script
	hr = m_iActiveScript->SetScriptState(SCRIPTSTATE_CONNECTED);
	if (HRVerify(hr, "Error running the script") == FALSE) {
		hr = m_iActiveScriptParse->Release();
		hr = m_iActiveScript->Release();

		m_iActiveScriptParse = NULL;
		m_iActiveScript      = NULL;
		m_pScriptDispatch    = NULL;

		return FALSE;
	}

	// We need the IDispatch for the script itself
	// to allow to use InvokeHelper
	hr = m_iActiveScript->GetScriptDispatch(0, &m_pScriptDispatch);
	if (HRVerify(hr, "Error getting script dispatch") == FALSE) {
		m_pScriptDispatch = NULL;
		return FALSE;
	}

	// Attach for easy access to InvokeHelper
	// ScriptEngineFactory is actually also derived from COleDispatchDriver,
	// So we can call AttachDispatch to use it's InvokeHelper method
	AttachDispatch(m_pScriptDispatch);

	return TRUE;
}

BOOL ScriptEngineFactory::UnloadScript()
{
	// Release script dispatch pointer from this
	DetachDispatch();

	// Release all interfaces
	if (m_iActiveScriptParse) m_iActiveScriptParse->Release();
	if (m_iActiveScript) m_iActiveScript->Release();
	if (m_pScriptDispatch) m_pScriptDispatch->Release();

	m_iActiveScriptParse = NULL;
	m_iActiveScript      = NULL;
	m_pScriptDispatch    = NULL;

	return TRUE;
}

BOOL ScriptEngineFactory::GetIDOfFunction(CString strFunctionName, DISPID* pID)
{
	// This method retrieves the DISPID to use when
	// calling a method in the loaded script
	// One needs to know how many parameters are used and
	// if there is a return value
	// FALSE is returned when either there is no script loaded,
	// or the method is not there.
	if (m_pScriptDispatch == NULL) {
		return FALSE;
	}

	BSTR pFunctionName = strFunctionName.AllocSysString();
	BOOL bStatus = FALSE;

	bStatus = m_pScriptDispatch->GetIDsOfNames(
		IID_NULL, 
		&pFunctionName, 
		1, 
		LOCALE_SYSTEM_DEFAULT, 
		pID) == S_OK;

	return bStatus;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av一区二区三区在线| 免费高清在线视频一区·| 亚洲精品在线免费观看视频| 欧美人xxxx| 777久久久精品| 69精品人人人人| 51精品国自产在线| 欧美一级黄色大片| 久久综合色一综合色88| 久久精品一级爱片| 国产精品理论在线观看| 亚洲一级在线观看| 一区二区三区欧美日韩| 亚洲一区二区三区免费视频| 亚洲高清免费在线| 青草国产精品久久久久久| 老司机免费视频一区二区三区| 看片的网站亚洲| 国产精品一二一区| 色综合激情久久| 3751色影院一区二区三区| 精品国产一区二区三区忘忧草| 国产三级欧美三级| 亚洲视频一区二区在线| 天天色 色综合| 国产在线麻豆精品观看| 99久久精品国产一区二区三区| 欧美专区亚洲专区| 日韩一区二区三区视频| 国产精品欧美综合在线| 亚洲国产毛片aaaaa无费看| 日韩国产欧美视频| 成人丝袜18视频在线观看| 91高清在线观看| 日韩免费视频线观看| 中文字幕一区av| 日韩精品成人一区二区三区| 成人一区二区视频| 欧美一区二区视频在线观看2020| 久久久国产午夜精品| 亚洲最大的成人av| 国产美女久久久久| 欧美日韩情趣电影| 国产日韩av一区二区| 天天色综合成人网| k8久久久一区二区三区| 欧美大片在线观看一区二区| 亚洲人亚洲人成电影网站色| 久久精品久久久精品美女| 色综合网站在线| 国产亚洲一二三区| 日韩精品国产精品| 欧洲生活片亚洲生活在线观看| 久久久久国产精品人| 日韩精品一二三区| 色噜噜狠狠色综合中国| 国产午夜亚洲精品理论片色戒| 日韩精品亚洲专区| 欧美三级在线播放| 亚洲图片你懂的| 不卡一区二区在线| 精品免费视频一区二区| 日韩电影在线观看一区| 色呦呦一区二区三区| 国产精品毛片久久久久久久| 国模无码大尺度一区二区三区| 欧美精品在线一区二区| 一区二区三区日韩精品| 色综合一区二区| 成人免费在线视频| av毛片久久久久**hd| 国产欧美一区二区三区沐欲| 国产一区二区伦理片| 日韩精品中文字幕在线不卡尤物| 日韩高清不卡在线| 欧美日韩一级片网站| 亚洲第一搞黄网站| 5月丁香婷婷综合| 日韩avvvv在线播放| 91精品国产福利| 美腿丝袜一区二区三区| 日韩欧美在线网站| 国产在线播放一区三区四| www国产精品av| 国内精品免费在线观看| 久久精品视频一区| 成人av网在线| 一区二区三区欧美亚洲| 欧美性猛交xxxx乱大交退制版| 一区二区三区国产豹纹内裤在线| 欧美午夜理伦三级在线观看| 亚洲成人自拍偷拍| 日韩欧美视频在线| 国产91精品免费| 亚洲欧美激情一区二区| 精品视频免费在线| 免费成人av在线| 欧美韩国日本不卡| 91亚洲精品乱码久久久久久蜜桃| 樱花草国产18久久久久| 91精品国产综合久久香蕉的特点| 免费国产亚洲视频| 欧美高清一级片在线观看| 91麻豆国产香蕉久久精品| 丝袜美腿亚洲一区| 久久亚洲私人国产精品va媚药| av激情成人网| 日韩电影在线观看电影| 国产精品国产精品国产专区不蜜 | 在线播放视频一区| 久久精品国产77777蜜臀| 国产精品久久久久久久久图文区| 欧美在线你懂得| 国产高清不卡二三区| 亚洲一区在线播放| 久久精品视频在线看| 欧美日韩亚洲丝袜制服| 国产不卡视频在线观看| 日韩在线播放一区二区| 中文字幕va一区二区三区| 51午夜精品国产| thepron国产精品| 精品一区二区日韩| 亚洲国产日韩一级| 中文字幕国产精品一区二区| 日韩一区二区三区电影在线观看| av亚洲精华国产精华精| 久久不见久久见免费视频1| 一区二区免费视频| 欧美激情一区不卡| 精品国产乱码久久久久久图片| 欧美在线免费视屏| 9久草视频在线视频精品| 黄页视频在线91| 三级精品在线观看| 一区二区三区蜜桃| 国产精品女主播在线观看| 欧美精品一区二区久久婷婷| 欧美精品色综合| 在线看日韩精品电影| 97超碰欧美中文字幕| 国产不卡高清在线观看视频| 美女免费视频一区| 日韩高清在线不卡| 婷婷激情综合网| 曰韩精品一区二区| 一区二区三区加勒比av| 亚洲同性同志一二三专区| 国产精品国产三级国产aⅴ中文| 2021中文字幕一区亚洲| 精品国产区一区| 精品久久久久久久久久久久久久久久久 | 国产在线国偷精品产拍免费yy| 天天综合日日夜夜精品| 午夜激情久久久| 三级成人在线视频| 日韩av在线免费观看不卡| 婷婷六月综合网| 日本伊人色综合网| 久久精品久久综合| 国产高清不卡二三区| 成人午夜av在线| 99免费精品在线| 色乱码一区二区三区88| 欧美在线观看视频在线| 欧美妇女性影城| 精品国产乱码久久久久久蜜臀| 精品国产91洋老外米糕| 欧美极品xxx| 综合分类小说区另类春色亚洲小说欧美| 中文字幕一区二区三区色视频| 亚洲乱码国产乱码精品精的特点 | 免费欧美在线视频| 国产激情一区二区三区桃花岛亚洲 | 一区二区三区免费在线观看| 亚洲一区二区精品视频| 蜜桃av一区二区在线观看| 国产成人在线免费观看| 91猫先生在线| 欧美日韩国产首页| 26uuu精品一区二区| 亚洲欧洲性图库| 日本特黄久久久高潮| 国产精品系列在线观看| 色婷婷亚洲一区二区三区| 欧美日韩黄色一区二区| 久久久久久免费网| 一区二区三区日韩精品| 精品一区二区在线播放| 色嗨嗨av一区二区三区| 日韩欧美不卡在线观看视频| 中文字幕日韩一区| 蜜桃视频在线一区| 99久久精品国产精品久久| 4438x亚洲最大成人网| 综合久久久久久| 国产在线不卡视频| 欧美巨大另类极品videosbest | 欧美日韩国产中文| 精品少妇一区二区|