我新建了一个ATL com组件然后添加上了activex server component,在这个东西上加了一个mytest()函数,
函数里就加了一句话m_piResponse->Write(_varaint_t(L"dfsd"));
然后我在网页里面调用这个函数,发现出错,后来我通过打log的方式看到这个指针是0。我看vckbase上的一篇文章http://www.vckbase.com/document/viewdoc/?id=1545中也是这样弄的啊,而且我这个还特别简单,
为什么会出错呢?关键是那个指针为0这个让我很费解,是不是有什么环境设置的原因啊,大家帮帮忙

解决方案 »

  1.   

    控件regsvr32注册控件,然后网页里,是否正确创建ActiveX对象,然后再调用方法
      

  2.   


    vckbase这个例子,一端要放到http server上的,你部署http server了吗?如果要在本地使用, 那你的form.htm就需要另外写,(你是在本机开发的,控件一般已经注册了;为了保险起见你也可以使用 "regsvr32 path_to_your_ctrl.dll" 注册控件
      

  3.   

    m_piResponse怎么初始化的,怎么创建的。
      

  4.   

    我把他文章中附的代码与网页架到我的机器上也不行,晕了。to2,3楼:控件是注册了的,网页也放到IIS上了。我的是IIS5.1TO4楼:m_piResposne在我添加activex server component后生成的代码里就有OnBeginpage函数对它初始化。
       
    我觉得是不是IIS上要设置权限什么的啊,不清楚啊
      

  5.   

    把我的代码全贴上来:VC里新建了一个ATL com组件然后添加上了activex server component,在这个东西上加了一个mytest(VARIANT name)函数,
    函数里就加了一句话m_piResponse->Write(_varaint_t(L"I was born on a mountain side!"));
    然后编译注册DLL
    下面是测试用的网页<%@LANGUAGE="JavaSCRIPT"%>
    <%
    function tt()
    {
    try
    {
    Response.Write("begin<br>");
    var ob =  new ActiveXObject("STPacsSC.pacsSC.1");
    ob.testMethod(1);//这里如果加2个参数或更多都说参数个数不对,通过这我觉得控件注册,生成都没问题
    delete ob;
    }
    catch(e)
    {
       Response.Write("error " + (e.number & 0xFFFF) );
       Response.Write(" - " + e.description);
    }
    }
    %>
    <HTML>
    <HEAD>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
    </HEAD>
    <BODY><P>&nbsp;</P><%
    tt();%>
    </BODY>
    </HTML>我在个网页里面调的DLL中的函数,而且我的DLL中testMethod只有一个参数,在网页里如果写testmethod(1,2)等就会说参数个数不对,
    所以我觉得,控件注册,生成都没问题,就是那个m_piResponse不知道为什么就是个0,
    难道我要显式的调用vc6给我生成的onStartPage吗?
    可是OnStartPage (IUnknown* pUnk)  中这个参数我不知道怎么搞啊,我对COM不了解,高手
      

  6.   

    HTTP 错误 500.100 - 内部服务器错误 - ASP 错误
    Internet 信息服务技术信息(用于支持人员)    * 错误类型:
          Active Server Pages, ASP 0115 (0x80004005)
          外部对象中发生了可捕获的错误(C0000005)。脚本无法继续执行。
          /stsc/asp2.asp现在调用testMethod出这个错
      

  7.   

    你需要创建服务器对象.
    我对JAVASCRIPT 不怎么熟悉.
    用VB做了一个,测试OK
    <%@LANGUAGE="vbscript"%><HTML>
    <HEAD>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
    </HEAD>
    <BODY><P>&nbsp;</P><%
    Response.Write("begin<br>")
    dim ob
    set ob =  Server.CreateObject("STPacsSC.pacsSC.1")//一定要加Server.否则会出错
    ob.mytest()
    set ob=nothing
    %>
    </BODY>
    </HTML>
      

  8.   

    vc函数代码,前两个是系统自动产生的
    STDMETHODIMP CpacsSC::OnStartPage (IUnknown* pUnk)  
    {
    if(!pUnk)
    return E_POINTER; CComPtr<IScriptingContext> spContext;
    HRESULT hr; // Get the IScriptingContext Interface
    hr = pUnk->QueryInterface(IID_IScriptingContext, (void **)&spContext);
    if(FAILED(hr))
    return hr; // Get Request Object Pointer
    hr = spContext->get_Request(&m_piRequest);
    if(FAILED(hr))
    {
    spContext.Release();
    return hr;
    } // Get Response Object Pointer
    hr = spContext->get_Response(&m_piResponse);
    if(FAILED(hr))
    {
    m_piRequest.Release();
    return hr;
    }

    // Get Server Object Pointer
    hr = spContext->get_Server(&m_piServer);
    if(FAILED(hr))
    {
    m_piRequest.Release();
    m_piResponse.Release();
    return hr;
    }

    // Get Session Object Pointer
    hr = spContext->get_Session(&m_piSession);
    if(FAILED(hr))
    {
    m_piRequest.Release();
    m_piResponse.Release();
    m_piServer.Release();
    return hr;
    } // Get Application Object Pointer
    hr = spContext->get_Application(&m_piApplication);
    if(FAILED(hr))
    {
    m_piRequest.Release();
    m_piResponse.Release();
    m_piServer.Release(); m_piSession.Release();
    return hr;
    }
    m_bOnStartPageCalled = TRUE;
    //CComVariant b=L"dfsd";
       // m_piResponse->Write(b);
    return S_OK;
    }STDMETHODIMP CpacsSC::OnEndPage ()  
    {
    m_bOnStartPageCalled = FALSE;
    // Release all interfaces
    m_piRequest.Release();
    m_piResponse.Release();
    m_piServer.Release();
    m_piSession.Release();
    m_piApplication.Release(); return S_OK;
    }STDMETHODIMP CpacsSC::mytest()
    {
    // TODO: Add your implementation code here CComVariant b=L"dfsd";
        m_piResponse->Write(b); 
    return S_OK;
    }
      

  9.   

    已解决,ATL控件没有问题,
    在网页里用JS的话就会报错,代码见6楼
    用VBSCRIPT就不会,狗日的MS大家引已为戒吧!