诚意请教GetActiveOleObject的使用场合(100分)

  • 主题发起人 主题发起人 Adnil
  • 开始时间 开始时间
A

Adnil

Unregistered / Unconfirmed
GUEST, unregistred user!
以及使用中的注意事项
 
它主要是用于获取一个已经运行的OleObject!
如果你不知道OleObject的类型,可以查阅VBA资料和
showmessage(OleObject1.oleclassname);
 
比如创建AUTOCAD对象
AcadApp := GetActiveOleObject('AutoCad.Application');
OUTLOOK对象等等
 
AcadApp := GetActiveOleObject('AutoCad.Application');
以此为例,获取ACadApp并且使用后,我是否应该释放这个对象?

另外,如果我要写一个对象,让GetActiveOleObject来使用,写该对象的时候
应该注意一些什么?
 
>>以此为例,获取ACadApp并且使用后,我是否应该释放这个对象?
其实这个就看你如何对待这个问题了。
对于Word稍微熟悉一点,就以Word为例说一下吧。
一般来说,GetActiveOleObject先于CreateOleObject使用,如果系统没有启动Word,则启动Word,否则连接Word。
当然,你可以不用GetActiveOleObject直接使用CreateOleObject,不过那样就会启动另外一个Word
try
Word_Handle := GetActiveOleObject('Word.Application');
except
try
Word_Handle := CreateOleObject('Word.Application');
except
Exit;
end;
end;
关于释放的问题呢?存在几个可能因素:
1、原来我仅仅打开了Word,但是没有打开任何文档
2、我原来打开了Word,同时打开了一个文档,在退出你的调用程序的时候也没有关闭我原来打开的文档
3、我原来打开了Word,同时打开了一个文档,在退出你的调用程序的以前已经关闭了该文档。

当初我的做法是,判断当前是否存在非我打开的Word文档,如果存在,则退出的时候不关闭Word,否则关闭Word
 
当内存中有一个COM程序的时候就取得它,使用在CREATOLEOBJECT函数之后!
 
怎么判断是取到的还是新生成的? 用完后是否应该释放?
 
先尝试取得,如果能得到对象就做上标记,否则Create一个,到最后判断是否有标记,
若没有标记则释放
 
后退
顶部