如何令ASP调用正在运行的进程外COM(自动化服务器)呢???

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

13 个解决方案

#1


学习

#2


我的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 大家好! ”。
我应该怎么办?
  

#3


学习,帮UP

#4


呵呵,UP!

#5


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

#6


这跟那个COM的实例模式和线程模式有关。

主要的是实例模式,一般缺省的是MultiInstance,这样是一个进程服务多个客户,是你需要的。

然后就注意线程模式,缺省是Apartment,这时你要想保持状态的话,可以使用全局变量。

#7


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

#8


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

#9


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

#10


不会调试不了的。
可能是你编译和链接选项的时候没有加入调试信息。

#11


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

#12


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

#13


不知道你是怎么做的。。Edit1.text不能算是全局变量。。


另外,你可以在进程管理器里观察,ASP调用的时候,有没有另外启动一个这EXE的另一个进程。
如果没有,这时可以确定还是同一进程在服务。
只要是同一进程,就可以用变量来共享。

#1


学习

#2


我的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 大家好! ”。
我应该怎么办?
  

#3


学习,帮UP

#4


呵呵,UP!

#5


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

#6


这跟那个COM的实例模式和线程模式有关。

主要的是实例模式,一般缺省的是MultiInstance,这样是一个进程服务多个客户,是你需要的。

然后就注意线程模式,缺省是Apartment,这时你要想保持状态的话,可以使用全局变量。

#7


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

#8


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

#9


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

#10


不会调试不了的。
可能是你编译和链接选项的时候没有加入调试信息。

#11


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

#12


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

#13


不知道你是怎么做的。。Edit1.text不能算是全局变量。。


另外,你可以在进程管理器里观察,ASP调用的时候,有没有另外启动一个这EXE的另一个进程。
如果没有,这时可以确定还是同一进程在服务。
只要是同一进程,就可以用变量来共享。