关于Ole自动化对象的连接和击活问题?(100分)

  • 主题发起人 主题发起人 biggo
  • 开始时间 开始时间
B

biggo

Unregistered / Unconfirmed
GUEST, unregistred user!
如果要检测Word应用程序是否运行
用GetActiveOleObject('Word.Application');
可以获取结果,如果Word没有运行,将在程序中间产生异常。
我自己也建立了一个Com的自动话对象的应用程序,不管我的自动化应用程序是否执行
用GetActiveOleObject('My.Application');总是产生[h4]“操作无法使用”[/h4]的错误信息
创建自动化对象语句CreataOleObject('My.Application');是能正常执行的。

具我自己研究,问题可能出在my.Application对象的持续击活上,
我的自动化应用程序已经执行,但他的Com部分并没有击活,处于休眠状态,
其他的程序,判断我的自动化程序是否击活的语句,就会老是不管程序是否执行,总是报告错误,

问大家有什么好的方法,在我的自动化程序的窗口运行的时候,总是保持Com部分是活动的?
 
[red][h4]也许我的问题大家可能还不太明白,我换个方式说一说[/h4][/red]
大家都知道Word、Excel软件能通过Com接口,在第三软件中控制Word的打开,和改写内容。
我也写了一个类似的Com应用程序,也能控制这个Com程序,执行修改Com程序中的内容。
但我的Com程序执行的结果和Word还有点不同,我在测试程序中打开Word,如果我关闭我的测试程序,Word是不会关闭的,但如果我打开我自己的自动化对象程序,如果我关闭我的测试程序,这个自动化对象的Com程序也就跟着关闭了。
怎么样才能做成Word那一样呢,不随控制程序关闭,在控制程序中必须执行Disconnect才能关闭自动化Com程序?
 
关注,我来提一提。
 
在调试程序时出错误,‘操作无法使用’。

这是在

function ActiveWord:Variant;
begin
try
Result:=Getactiveoleobject('word.application');
except
try
Result:=createoleobject('word.application');
except
messagedlg('word may not be installed', mterror, [mbok], 0);
abort;
end;
end;
end;

时出现,其实这个问题不是什么问题,当没有找到Word时,程序转而去执行except
这时程序就以为是出错了,所以给出了告警。这时可以继续执行程序。

而在退出调试状态后,执行就正常了。这个问题还可以用改变DEBUG设置,让Delphi不出现except告警来解决。
 
提提

偶也碰到这个问题了。
我让我的 ole automation server程序运行,然后再用客户端用 getActiveOleObject 来调用它,
但总是报告楼主所说的问题。

如果客户端用CreateOleObject 来连接服务端,倒是可以。但是这样又重新运行了服务器端
的一个实例然后关闭。而我想做的是,服务器端只存在一个实例,客户端每次连接用GetActiveOleObject
。因为我的这个server启动关闭要花不少时间。

btw: Delphi 自带的那个 automation memo demo 也是这样的问题。

请指教
 
调用Word时提供不同的参数,Word打开的方式也不一样,它可以是随你的程序一起关闭,也可以不关闭。具体参数我现在一下子忘记了
 
后退
顶部