我用Delphi5开发了一个最简单的进程外COM(自动化服务器),功能是修改Edit1.text。
我首先运行自动化服务器,如果我同时启动若干个Delphi5开发的客户端,这时可以看到每个客户端都是用我这个运行中的自动化服务器。
问题是:如果我换了用ASP调用的话,ASP用的不是我这个运行中的自动化服务器。应该是ASP自己暗地里启动的自动化服务器。为什么会这样???
是否可以令ASP都使用我这个运行中的自动化服务器???
  

解决方案 »

  1.   

    我的ASP代码是:
    <html>
    <body>
    <%
    Set AutoSrv = Server.CreateObject("AutoSrv.MyAutoSrv")
      Response.write AutoSrv.Caption & " "
      AutoSrv.Caption = "HEHE"
      AutoSrv.SetColor(CLRed)
      AutoSrv.SetEditText("HAHA")
      Response.write AutoSrv.Caption & " "
    %>
    大家好!
    </body>
    </html>
    结果每次运行,显示的都是“XXX: AutoSrv HEHE 大家好! ”。
    我喜欢第一次运行ASP是这样。
    以后运行都变成“XXX: HEHE HEHE 大家好! ”。
    我应该怎么办?
      
      

  2.   

    可能你的com没有关闭,试试 set AutoSrv=nothing
      

  3.   

    这跟那个COM的实例模式和线程模式有关。主要的是实例模式,一般缺省的是MultiInstance,这样是一个进程服务多个客户,是你需要的。然后就注意线程模式,缺省是Apartment,这时你要想保持状态的话,可以使用全局变量。
      

  4.   

    我是用MultiInstance,问题是我的Edit1.text应该算是全局变量了吧?
    而Delphi客户端就可以在同一个服务器上工作。就是ASP调用的时候,不用我这个服务器。
    应该怎么设置才可以呢?
      

  5.   

    楼主可以跟踪调试一下程序的。。
    应该很容易。
    DELPHI启动这个EXE COM服务,设置断点。
      

  6.   

    根本上跟踪调试不了。
    ASP根本不调用我这个调试中的服务器。
      

  7.   

    可以把COM包含在OCX里面嘛,这样ASP就很容易调用了,也不容易错.
      

  8.   

    现在不是容易,还是错的问题啊!
    现在是ASP不是用我运行中的实例,ASP自己暗地里起一个实例。
    而我需要用运行中的实例来操作串口,ASP自己起的实例操作不了串口啊!
      

  9.   

    不知道你是怎么做的。。Edit1.text不能算是全局变量。。
    另外,你可以在进程管理器里观察,ASP调用的时候,有没有另外启动一个这EXE的另一个进程。
    如果没有,这时可以确定还是同一进程在服务。
    只要是同一进程,就可以用变量来共享。