MFC IActiveScriptSite 使用指南:与 Active Script 引擎交互

MFC 中的 IActiveScriptSite 接口用于与 Active Script 引擎进行交互,以下是使用示例:

  1. 定义类并继承自 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);
};
  1. 实现接口中的方法:
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;
}
  1. 在使用 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 引擎进行交互,并实现各种脚本相关的功能。

MFC IActiveScriptSite 使用指南:与 Active Script 引擎交互

原文地址: https://www.cveoy.top/t/topic/jM3z 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录