CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
(图)邪恶的韩国UMPC 使用 Java 编写数据库应用新规范
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

Application对象问题,Set Application("xxx")=server.createobject("xxx")时出错

楼主antshome(我好累)2002-09-04 15:12:53 在 Web 开发 / ASP 提问

代码如下:  
  <%  
        set   Application("comobj")=server.CreateObject("project1.class1")  
  %>  
   
  出错提示为  
   
  应用程序对象   错误   'ASP   0197   :   80004005'    
   
  不允许的对象使用    
   
  /test.asp,行3    
   
  不能添加   apartment   型的对象到应用程序的实质对象中。    
   
  但是换成server.createobject("adodb.recordset")则可以,不知道是什么原因。请高手指点  
  问题点数:100、回复次数:11Top

1 楼antshome(我好累)回复于 2002-09-04 15:15:59 得分 0

补充一下,自定义的组件没有问题  
  换成  
  set   session("comobj")=server.CreateObject("project1.class1")  
  可以运行Top

2 楼cmsoft(韦小宝是我的老乡)(草根在路上)回复于 2002-09-04 15:16:45 得分 0

project1.dll注册了没有?Top

3 楼antshome(我好累)回复于 2002-09-04 15:21:08 得分 0

当然注册过了,是在本机编译的,不然set   session("comobj")=server.CreateObject("project1.class1")  
  怎么可以Top

4 楼meetweb(niky)回复于 2002-09-04 15:21:24 得分 5

换成server.createobject("adodb.recordset")则可以  
  这样说来是你的project1.dll可能写的有问题。或者没有注册Top

5 楼meetweb(niky)回复于 2002-09-04 15:25:06 得分 5

那这样好啦。  
  请用一个中间变量来取的参数  
  set   aa=server.CreateObject("project1.class1")  
  Application("comobj")=aa  
  看行的通否?  
   
  Top

6 楼qiushuiwuhen(秋水无恨)回复于 2002-09-04 15:25:12 得分 70

http://www.csdn.net/expert/Topicview1.asp?id=974756  
   
  中间那段就会明白了  
   
  帮你介绍一下线程模型的问题:  
  1、Single-threaded:某一时刻只能有一个进程使用组件  
  2、Apartment-threaded:若干进程都可以使用组件,但只有一个在只定的线程上面  
  3、Multiple-threaded:若干进程都能使用组件,并且这些进程可以运行于不同的线程之上  
  4、Both-threaded:对象既可以使单元线程,也可以是自由线程  
  5、Neutral-threaded:若干个进程都可以使用某组件,并且可以使用指定的一祖线程中的任何一个(win2000中引入)  
  Top

7 楼yonghengdizhen(等季节一过,繁花就凋落)回复于 2002-09-04 15:25:55 得分 20

是组件线程模型有问题,  
  你是用的单线程模型.  
  在单机调试的情况下OK.  
  但在多用户访问时就会有问题.Top

8 楼antshome(我好累)回复于 2002-09-04 15:28:52 得分 0

组件不可能有问题,我在本机用VB写的标准ActiveX   Dll,然后编译成功。  
   
  直接用set   ss=server.CreateObject("project1.class1")则没有问题  
   
  我怀疑是Application的问题。同时我用VC写了一个ATL   COM测试了一下,也行不通  
  Top

9 楼antshome(我好累)回复于 2002-09-04 15:43:18 得分 0

to:   qiushuiwuhen(秋水无恨)   ,跟线程有关系吗?我是单机调试,即使VB写的组件是单线程,但还是可以用啊。为什么我的代码会出错?  
   
  to:   meetweb(niky)早试过了,一样的错误  
   
  to:yonghengdizhen(孤鹰)   现在问题是单机都不OK  
  Top

10 楼antshome(我好累)回复于 2002-09-04 15:51:19 得分 0

我知道问题答案了,  
   
  在工程属性里-》线程模型从单线程改为单元线程就行了Top

11 楼Lostinet(Hello)回复于 2002-09-04 16:16:23 得分 0

通常使用的线程模型是  
  single-threaded和free-threaded  
   
  single-threaded的意思是,该组件不是线性安全的。  
  如果你要多条线程同时调用那组件,而又没有处理该组件实例的访问同步,  
  就有可能引发线程同步错误。  
   
  free-threaded相反,它的实现是线性安全的。  
  如果有多条线程同时对那组件的实例进行操作,也不会有问题。  
  因为那组件内部已经控制了线程的同步操作。  
   
  一个就在我们身边的例子是  
  Microsoft.XMLDOM是single-threaded的  
  Microsoft.FreeThreadedXMLDOM是free-threaded的。  
   
  所以这样会出错:  
  Application("xd")=Server.CreateObject("Microsoft.XMLDOM")  
  而  
  Application("xd")=Server.CreateObject("Microsoft.FreeThreadedXMLDOM")  
  就不会。  
   
  VB做出来的COM组件是single-threaded的。因为VB本身不支持多线程。  
  VB可以异步操作,是因为VB的FORM是基于windows消息体制的。就像DHTML那样。  
  当然如果依赖其他组件,VB可以做到多线程。可惜VB本身就没有对多线程的支持。  
   
  ATL做出来的class,要基于才能自动注册成free-threaded的组件模型。  
  CComObjectRootEx<CComMultiThreadModel>  
   
   
  ASP中:  
  一般情况下Application集合不可以收集single-threaded模型的组件。  
  除非一个后台设置的一个选项打开。  
   
  Session支持任何线程模型的组件。  
  但是一旦Session集合收集到一个组件(那是因为访问组件默认值失败时),那么整个Session都会被设置为单线程。。  
  (意思是,所有同一个Session的请求都不会继续以多线程的方式进行。而是以请求队列的形式来处理。  
  对于用户,意思是不能同时打开两个页面,时间肯定有绝对的先后)Top

相关问题

  • manager server出错!
  • CreateObject("Excel.Application")这句出错,why????????
  • vbs使用CreateObject函数出错?
  • vbs使用CreateObject函数出错?
  • mysqlfront 连接时出错,出错信息为“ host is not allowed to connect to this MySQL server”
  • SQL Server 数据库出错求救!
  • 备份文件出错,sql server
  • $$$特急!SQL Server访问出错$$$
  • win2k ad server 安装sp3出错求助
  • 安装sql server出错,请帮忙!

关键词

  • 组件
  • 线程
  • 多线程
  • vb
  • application
  • 注册
  • microsoft
  • asp
  • 出错
  • 模型

得分解答快速导航

  • 帖主:antshome
  • meetweb
  • meetweb
  • qiushuiwuhen
  • yonghengdizhen

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...

社区焦点:

教你怎样用C#搞笑整人
最懒惰的程序员写的Cache
程序员如何掌握专业英语
Java栈与堆
分享:让人懊恼的面试
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo