| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2636 人关注过本帖
标题:ActiveX Exe 只允许一个进程时创建对象失败
取消只看楼主 加入收藏
jiashie
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:237
专家分:999
注 册:2009-4-30
结帖率:100%
收藏
已结贴  问题点数:50 回复次数:4 
ActiveX Exe 只允许一个进程时创建对象失败
有这么一个需求:
1、某程序既要能独立运行(随系统自动启动,我用的是服务的方式),又能在网页中(asp中)调用    ------>于是我想到用ActiveX Exe来做。
2、只能运行一个进程    ------>于是我使用App.PrevInstance 来判断是否有前一个进程,如果有则当前程序结束。
问题来了:
1、如果这个程序只是在网页中通过CreateObject()或GetObject()的方式启动,没有人为地去先点击运行或随系统启动。(一句话,在网页调用之前没有这个进程),那么一切正常。(即使没有用App.PrevInstance 来限制只运行一个进程,而是设置“工程属性->线程缓冲池(1),不管开几个网页,都只有一个进程,很完美)。
2、在网页调用之前,已经存在这个进程,那么在网页中通过CreateObject()或GetObject()的方式启动时,就无法创建对象(App.PrevInstance的限制);如果取消了App.PrevInstance的限制,则会启动第二个进程,甚至还可以再通过手动点击运行n个进程。

有没有办法既 只运行一个进程,又能(当已存在这个进程时)在网页中创建对象?
或者,有没有办法 在创建对象时,如果ActiveX Exe进程已存在,就引用到当前进程中的实例,而不是新创建一个进程。

有点乱。感觉像是个"impossible mission"
testActiveXExe.rar (11.19 KB)


[ 本帖最后由 jiashie 于 2010-7-30 14:04 编辑 ]
搜索更多相关主题的帖子: ActiveX Exe 进程 对象 失败 
2010-07-30 10:35
jiashie
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:237
专家分:999
注 册:2009-4-30
收藏
得分:0 
应该完成CreateObject()()或GetObject()的函数语义:返回前一个Activex exe对象的实例

怎么返回?
2010-07-30 14:03
jiashie
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:237
专家分:999
注 册:2009-4-30
收藏
得分:0 
以下是引用东海一鱼在2010-7-30 14:29:36的发言:

就像execl一样,当你创建一个execl自动化对象后,再次创建,他就会返回第一个com对象。
具体实现如下:
调用QueryInterface查询该接口(对象)是否存在,如存在则调用AttachDispatch返回已存在的对象。
否则调用CreateDispatch创建新对象。

你的意思是由创建该对象的客户端来"调用QueryInterface查询该接口(对象)是否存在,如存在则调用AttachDispatch返回已存在的对象。
否则调用CreateDispatch创建新对象" ?
还是这个对象自己判断?
如果是前者,那就没有意义了,因为在asp等环境中没办法使用这么高级的函数调用。
2010-08-02 08:29
jiashie
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:237
专家分:999
注 册:2009-4-30
收藏
得分:0 
已经把ActiveX Exe注册到ROT中,在一般的vb代码中,可以用getObject(,className)获得已经运行的对象。
但是,放到asp中使用时,仍然无法用getObject(,className)。这是关键。
估计在Asp中是没办法解决的了?
2010-08-03 07:40
jiashie
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:237
专家分:999
注 册:2009-4-30
收藏
得分:0 
QueryInterface、CreateDispatch、AttatchDispatch在VC中倒是很方便使用,但在vb里还真不知道如何下手。
只好尝试通过变通的方式来达到“已运行的ActiveX Exe进程可以被asp调用”的目的,那就是:这个已运行的ActiveX Exe也是通过asp启动的,所以其它的asp页面应该也能通过getObject共享ROT中的这个对象
2010-08-03 09:49
快速回复:ActiveX Exe 只允许一个进程时创建对象失败
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013893 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved