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

📄 cwsh.h

📁 日本的开源编辑器源码
💻 H
字号:
// $Id: CWSH.h,v 1.1 2002/08/25 16:56:45 Administrator Exp $
/*!	@file
	@brief WSH Handler
	@author 鬼
	@date 2002年4月28日,5月3日,5月5日,5月6日,5月13日,5月16日
	@date 2002.08.25 genta リンクエラー回避のためCWSHManager.hにエディタの
		マクロインターフェース部を分離.

	@par TODO
	@li GetIDsOfNamesの最適化 → std::mapを使えば楽そう…しかし私はSTLに疎いので(;_;
*/
/*
	Copyright (C) 2002, 鬼
	This source code is designed for sakura editor.
	Please contact the copyright holder to use this code for other purpose.

*/

#ifndef __WSH_H__
#define __WSH_H__

#include <windows.h>
#include <winreg.h>
#include <objbase.h>
#include <initguid.h>
#include "activscp.h"
//↑Microsoft Platform SDK より

#include <string>
#include <vector>

//COM一般

template<class Base>
class ImplementsIUnknown: public Base
{
private:
	int m_RefCount;
	ImplementsIUnknown(const ImplementsIUnknown &);
	operator = (const ImplementsIUnknown &);
public:
	#ifdef __BORLANDC__
	#pragma argsused
	#endif
	virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void ** ppvObject) 
	{ 
		return E_NOINTERFACE; 
	}
	virtual ULONG STDMETHODCALLTYPE AddRef() { ++ m_RefCount; return m_RefCount; };
	virtual ULONG STDMETHODCALLTYPE Release() { -- m_RefCount; int R = m_RefCount; if(m_RefCount == 0) delete this; return R; };
public:
	ImplementsIUnknown(): m_RefCount(0) {};
	virtual ~ImplementsIUnknown(){};
};

//WSH一般

typedef HRESULT (*CInterfaceObjectMethod)(int ID, DISPPARAMS *Arguments, VARIANT* Result, void *Data);
typedef void (*ScriptErrorHandler)(BSTR Description, BSTR Source, void *Data);

class CWSHClient;

//スクリプトに渡されるオブジェクト
class CInterfaceObject: public ImplementsIUnknown<IDispatch>
{
private:
	ITypeInfo* m_TypeInfo;
public:
	struct CMethodInfo
	{
		FUNCDESC Desc;
		wchar_t Name[64];
		CInterfaceObjectMethod Method;
		ELEMDESC Arguments[8];
		int ID;
	};
	typedef std::vector<CMethodInfo> CMethodInfoList;
	CMethodInfoList m_Methods;
	CWSHClient *m_Owner;
	
	CInterfaceObject(CWSHClient *AOwner);
	~CInterfaceObject();
	void AddMethod(wchar_t *Name, int ID, VARTYPE *ArgumentTypes, int ArgumentCount, VARTYPE ResultType, 
					CInterfaceObjectMethod Method);
	void ReserveMethods(int Count)
	{
		m_Methods.reserve(Count);
	}
	
	virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void ** ppvObject);
	virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(
					REFIID riid,
					OLECHAR FAR* FAR* rgszNames,
					UINT cNames,
					LCID lcid,
					DISPID FAR* rgdispid);
	virtual HRESULT STDMETHODCALLTYPE CInterfaceObject::Invoke(
					DISPID dispidMember,
					REFIID riid,
					LCID lcid,
					WORD wFlags,
					DISPPARAMS FAR* pdispparams,
					VARIANT FAR* pvarResult,
					EXCEPINFO FAR* pexcepinfo,
					UINT FAR* puArgErr);
	virtual HRESULT STDMETHODCALLTYPE GetTypeInfo( 
					/* [in] */ UINT iTInfo,
					/* [in] */ LCID lcid,
					/* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
	virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount( 
					/* [out] */ UINT __RPC_FAR *pctinfo);
};

class CWSHClient
{
private:
	IActiveScript *m_Engine;
protected:
	ScriptErrorHandler m_OnError;
public:
	CWSHClient(wchar_t const *AEngine, ScriptErrorHandler AErrorHandler, void *AData);
	~CWSHClient();
	CInterfaceObject *m_InterfaceObject;
	void *m_Data;
	bool m_Valid; //trueの場合使用可能
	void Execute(wchar_t const *AScript);
	void Error(BSTR Description, BSTR Source);
	void Error(wchar_t* Description);
};
#endif

⌨️ 快捷键说明

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