我在调吕 思 伟 、潘 爱 民 在《微电脑世界周刊》上发表的《ActiveX Scripting 技 术》一文的程序时,执行到HRESULT CScriptHost::CreateScriptEngine()的hr = m_ps- >SetScriptSite(this);一句时总是出现“ox759e234b指令引用的ox00000000内存不能为read”和“Unhandled exception in script.exe(VBSCRIPT.DLL):oX000000005:Access Violation. ”错误,请指教!
this指针已指向CScriptHost* m_pScHost.

解决方案 »

  1.   

    指向的地址无效,多半是m_ps没有初始化成功。
      

  2.   

    指针已初始化了,前面出现许多类似“Loaded 'C:\WINNT\System32\ntdll.dll', no matching symbolic information found.”的信息,是不是连接库没加上去,但这个路径上确实存在这个连接库,为什么?非常感谢楼上几位仁兄指点,能在给开一下吗,多谢!
      

  3.   

    give out the source and we can help you
      

  4.   

        class CScriptHost : public IActiveScriptSite , public IActiveScriptSiteWindow
        {
        public:
          CScriptHost(LPUNKNOWN lpUnkCtrl, LPCOLESTR
     pNamedItem, HWND hWnd);
          virtual ~CScriptHost();
          
          HRESULT CreateScriptEngine();
          HRESULT ParseFile(const char* 
    pszFileName,LPCOLESTR pstrItemName);    public:
            //IUnknown members
          STDMETHOD(QueryInterface)(REFIID riid,void** ppvObj);
            STDMETHOD_(unsigned long,AddRef)(void);
            STDMETHOD_(unsigned long,Release)();        //IActiveScriptSite members
            STDMETHOD(GetLCID)(LCID  *plcid) ;
    STDMETHOD(GetItemInfo)(LPCOLESTR pstrName,DWORD 
    dwReturnMask,IUnknown  * *ppiunkItem,ITypeInfo  * *ppti) ;
    STDMETHOD(GetDocVersionString)(BSTR  *pbstrVersion) ;
    STDMETHOD(OnScriptTerminate)(const VARIANT 
     *pvarResult,const EXCEPINFO  *pexcepinfo) ;
    STDMETHOD(OnStateChange)(SCRIPTSTATE ssScriptState) ;
    STDMETHOD(OnScriptError)(IActiveScriptError  *pscripterror) ;
    STDMETHOD(OnEnterScript)(void) ;
    STDMETHOD(OnLeaveScript)(void) ;        //IActiveScriptSiteWindow members
            STDMETHOD(GetWindow)(HWND  *phwnd) ;
            STDMETHOD(EnableModeless)(BOOL fEnable);    public:
            IActiveScript* m_ps;
            IActiveScriptParse* m_psp;    private:
            UINT m_cref;
            CLSID m_clsidEngine;
            LPUNKNOWN m_lpUnkCtrl;
            LPOLESTR m_pNamedItem;
            HWND m_Wnd;
    };void CScriptDlg::OnLoadscript() 
    {
    CFileDialog dlg(TRUE, "*.txt","*.txt",OFN_HIDEREADONLY |
     OFN_OVERWRITEPROMPT,"Text files (*.txt)");  if(dlg.DoModal()==IDOK)
      {
        CString strPath;
        strPath = dlg.GetPathName();
        if (strPath.IsEmpty())
          return;
        if (m_pScHost != NULL)
          m_pScHost->m_ps->Close();
        CWnd *pCalander = GetDlgItem(IDC_CONTROL1);
        m_pUnknownCtrl = pCalander- >GetControlUnknown();    m_pScHost = new CScriptHost(m_pUnknownCtrl, L"control", m_hWnd);
        HRESULT hr = m_pScHost->CreateScriptEngine();
        hr = m_pScHost- >ParseFile(strPath,L"control");
        GetDlgItem(IDC_RUNSCRIPT)->EnableWindow(TRUE);
        GetDlgItem(IDC_RUNSCRIPT)- >SetWindowText("Run Script");
        return;
      }
      
    CScriptHost::CScriptHost(LPUNKNOWN lpUnkCtrl, 
    LPCOLESTR pNamedItem , HWND hWnd) 
        : m_ps(NULL),m_psp(NULL),m_cref(0)
        {
            m_lpUnkCtrl = lpUnkCtrl;
            m_pNamedItem = pNamedItem;
            m_Wnd = hWnd;        // the clsid of VBScript Engine
            static CLSID const clsid = {0xb54f3741, 0x5b07, 0x11cf, 
    {0xa4, 0xb0, 0x0, 0xaa, 0x0, 0x4a, 0x55, 0xe8}};        // Default to VBScript
            m_clsidEngine = clsid;
        }    CScriptHost::~CScriptHost()
        {
            if(m_psp)
            m_psp- >Release();        // we must first close the script engine
            if(m_ps)
            {
                m_ps- >Close();
                m_ps- >Release();
            }
        }   HRESULT CScriptHost::CreateScriptEngine()
        {
            HRESULT hr = S_OK;        hr = ::CoCreateInstance(m_clsidEngine,NULL,CLSCTX
    _INPROC_SERVER,IID_IActiveScript,(void**)&m_ps);
            if (SUCCEEDED(hr))
            {
              // QI the IActiveScriptParse pointer
    hr = m_ps- >QueryInterface(IID_IActiveScriptParse,
    (void**)&m_psp);
            if (FAILED(hr) )
            {
                m_ps- >Release();
                return hr;
            }        // set the script site
            hr = m_ps- >SetScriptSite(this);
            if ( FAILED( hr ) )
                return hr;        m_ps- >SetScriptState(SCRIPTSTATE_INITIALIZED);
            // initiate the script engine
            hr = m_psp- >InitNew();
            if (FAILED(hr))
                return hr;        hr = m_ps- >AddNamedItem(m_pNamedItem,
    SCRIPTITEM_ISVISIBLE|SCRIPTITEM_ISSOURCE);
          }      return hr;
    }
      

  5.   

    [email protected]
    let me see
      

  6.   

    楼上的哥们看过来,大家不要不理不采! lednpc收到原码了吗?