Out-Proc Server 會自動關閉??(200分)

  • 主题发起人 主题发起人 jiichen
  • 开始时间 开始时间
J

jiichen

Unregistered / Unconfirmed
GUEST, unregistred user!
創建了一個 COM ,類型是 Out-Proc Server

程式執行檔只有一個 a.exe ,沒有 dll ,呼叫方法是類似網路螞蟻(NetAnts),
或者說是更像日本下載程式 Iria,同樣都只有一個執行檔 ,使用 IE 右鍵
來呼叫,呼叫結果會秀出 A 程式的 B Form 。

但目前的情況是,要先執行 a.exe ,然後才能使用右鍵呼叫,如果沒有先執行
a.exe ,會很正常的自動執行程式並秀出 B Form ,但問題是之後便會自己結束了。


求:不會自動關閉程式的方法!(這問題或許很簡單,但我是 COM 初學者,還請
詳細回答,謝謝)
 
我做了一個 client 來呼叫,情況亦同,Server 程式執行時很正常,
但 Server 程式沒執行時,會自動執行 Server 程式,然後就關閉了。

 
多半你在按钮事件中声明临时变量,创建com对象后附值给临时变量,
当按钮事件结束后,临时变量会退栈,这时com对象会自动释放。
你应在TFORM对象中声明private变量A,创建com对象后附值给他,
当A:=nil时com对象会自动释放。(一个client引用时)
 
感謝告知,這個辦法對 client 程式有效,但這樣又回到原點了,使用 IE 右鍵呼叫依舊
會產生相同的情況。

我是模仿 Iria 的寫法. 其 iria_ie2.htm 內的最下面便會將其消滅,
像這種情況,要如何做呢?(就算去掉該行,情況亦同!)

我有試著將 Server 程式的呼叫子視窗改成使用 ShowModal ,但該子視窗結束後依舊會
自動關閉程式。
目前情況是: 啟動程式 -> 主視窗開啟 -> 子視窗開啟 -> 子視窗關閉 -> 程式關閉
我想要的是: 啟動程式 -> 主視窗開啟 -> 子視窗開啟 -> 持續存在
=======================================================================
On Error Resume Next
Dim Iria
Set Iria = CreateObject( "Iria.IriaApi" )

If Iria is Nothing Then
MsgBox("Iria v1.04c以前では動作しません")
Else
Dim Links
Dim Urls
Set Links = external.menuArguments.document.links
'ページのUrlはRefererになる 空行にすればRefererは付かない
Urls = external.menuArguments.document.Url & vbCRLF
'Urls = vbCRLF
For i = 0 to Links.length - 1
Urls = Urls & Links(i).href & vbCRLF
Next
Iria.AddUrl Urls,1
End If
Set Iria = Nothing
 
感謝你的告知,解決了 client 的問題,但又回到原點了,因為使用 IE 右鍵來
呼叫依舊會有相同的問題。

我是參考 Iria 的寫法,最後一行會消滅該變數,試過去掉該行,情況亦同。

也試過將子視窗改成 ShowModal 方法,但該子視窗關閉後,程式亦會自動關閉。
目前情況: 右鍵呼叫 -> 程式啟動 -> 主視窗開啟 -> 子視窗開啟 -> 子視窗關閉 -> 程式自動關閉
我想要的是: 右鍵呼叫 -> 程式啟動 -> 主視窗開啟 -> 子視窗開啟 -> 子視窗關閉 -> 依舊存在

如果程式先啟動再使用右鍵呼叫 -> 子視窗開啟 -> 子視窗關閉 -> 程式依舊存在
(正常,但有缺點:須先啟動程式)

===========================================================================
On Error Resume Next
Dim Iria
Set Iria = CreateObject( "Iria.IriaApi" )

If Iria is Nothing Then
MsgBox("Iria v1.04c??")
Else
Dim Links
Dim Urls
Set Links = external.menuArguments.document.links
'UrlReferer Referer?
Urls = external.menuArguments.document.Url & vbCRLF
'Urls = vbCRLF
For i = 0 to Links.length - 1
Urls = Urls & Links(i).href & vbCRLF
Next
Iria.AddUrl Urls,1
End If
Set Iria = Nothing
 
我也提过 这个问题 已经解决 看我这个贴子
http://www.delphibbs.com/delphibbs/dispq.asp?lid=624629
 
謝啦!已解決!重複轉貼一次解決辦法。
=========================================================================
mypine, 时间:2001-9-24 20:54:00, ID:642831
to kindly:
COM是采用接口引用计数机制来实现它的创建与释放与客户无关性的。因此你的客户端
调用COM以后,如果退出,它的计数为0,当然COM也会自动退出了。
诚如你上面所做的,要使它不退出,只有显式调用_AddRef(增加一个引用)了。为了
避免你的COM服务器在以后退出时跳出一个可恶的对话框,你可以:
(1)修改ComServ单元的源码。(需要的话,向我发email:boypine@yahoo.com.cn)
或者:
(2)在你的COM Server的主Form的OnCloseQuery事件中写下:
ComServer.UIInteractive:=False;

 
多人接受答案了。
 
后退
顶部