MFC IActiveScriptSite 使用指南:与 Active Script 引擎交互
MFC IActiveScriptSite 使用指南:与 Active Script 引擎交互
MFC 中的 IActiveScriptSite 接口用于与 Active Script 引擎进行交互,以下是使用示例:
- 定义类并继承自 IActiveScriptSite:
class CMyScriptSite : public IActiveScriptSite
{
public:
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
STDMETHODIMP GetLCID(LCID *plcid);
STDMETHODIMP GetItemInfo(LPCOLESTR pstrName, DWORD dwReturnMask, IUnknown **ppiunkItem, ITypeInfo **ppti);
STDMETHODIMP GetDocVersionString(BSTR *pbstrVersion);
STDMETHODIMP OnScriptTerminate(const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo);
STDMETHODIMP OnStateChange(SCRIPTSTATE ssScriptState);
STDMETHODIMP OnScriptError(IActiveScriptError *pscripterror);
STDMETHODIMP OnEnterScript(void);
STDMETHODIMP OnLeaveScript(void);
};
- 实现接口中的方法:
STDMETHODIMP CMyScriptSite::QueryInterface(REFIID riid, void **ppvObject)
{
if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IActiveScriptSite))
{
*ppvObject = this;
AddRef();
return S_OK;
}
else
{
*ppvObject = NULL;
return E_NOINTERFACE;
}
}
STDMETHODIMP_(ULONG) CMyScriptSite::AddRef()
{
return 1;
}
STDMETHODIMP_(ULONG) CMyScriptSite::Release()
{
return 1;
}
STDMETHODIMP CMyScriptSite::GetLCID(LCID *plcid)
{
*plcid = LOCALE_SYSTEM_DEFAULT;
return S_OK;
}
STDMETHODIMP CMyScriptSite::GetItemInfo(LPCOLESTR pstrName, DWORD dwReturnMask, IUnknown **ppiunkItem, ITypeInfo **ppti)
{
// TODO: 实现 GetItemInfo 方法
return E_NOTIMPL;
}
STDMETHODIMP CMyScriptSite::GetDocVersionString(BSTR *pbstrVersion)
{
*pbstrVersion = SysAllocString(L'1.0');
return S_OK;
}
STDMETHODIMP CMyScriptSite::OnScriptTerminate(const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
{
// TODO: 实现 OnScriptTerminate 方法
return S_OK;
}
STDMETHODIMP CMyScriptSite::OnStateChange(SCRIPTSTATE ssScriptState)
{
// TODO: 实现 OnStateChange 方法
return S_OK;
}
STDMETHODIMP CMyScriptSite::OnScriptError(IActiveScriptError *pscripterror)
{
// TODO: 实现 OnScriptError 方法
return S_OK;
}
STDMETHODIMP CMyScriptSite::OnEnterScript(void)
{
// TODO: 实现 OnEnterScript 方法
return S_OK;
}
STDMETHODIMP CMyScriptSite::OnLeaveScript(void)
{
// TODO: 实现 OnLeaveScript 方法
return S_OK;
}
- 在使用 Active Script 引擎时,将实例化的 CMyScriptSite 对象传递给 IActiveScript 接口的 SetScriptSite 方法:
CComPtr<IActiveScript> spScript;
// 实例化 Active Script 引擎
// ...
// 将 CMyScriptSite 对象传递给 Active Script 引擎
CComPtr<IActiveScriptSite> spSite;
spSite.Attach(new CMyScriptSite());
spScript->SetScriptSite(spSite);
通过以上步骤,你就可以在 MFC 中使用 IActiveScriptSite 接口与 Active Script 引擎进行交互,并实现各种脚本相关的功能。
原文地址: https://www.cveoy.top/t/topic/jM3z 著作权归作者所有。请勿转载和采集!