全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2046
推到 Plurk!
推到 Facebook!

OLE对象的Initialization & Finalization

尚未結案
wzpuma
一般會員


發表:10
回覆:19
積分:5
註冊:2003-02-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-22 15:57:25 IP:218.5.xxx.xxx 未訂閱
我在程序中用了TWebBrowser控件,后见一篇文章介绍:由于 TWebBrowser是一个嵌入的OLE对象而不算是用Delphi编写的VCL,须初始化和终止化(Initialization & Finalization),并推荐了一段代码: initialization OleInitialize(nil); finalization begin try OleUninitialize; except end; end; 只是这OleInitialize,OleUninitialize是哪个Unit的方法,以便在uses中引入?
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-22 16:06:25 IP:147.8.xxx.xxx 未訂閱
Unless you are using the TWebBrower in a thread other than the main thread, there is no need to initialize and finalize. The units (e.g. ComObj, etc.) you used properly contains the required calls (CoInitialize and CoUninitialize).
wzpuma
一般會員


發表:10
回覆:19
積分:5
註冊:2003-02-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-23 10:24:27 IP:218.5.xxx.xxx 未訂閱
我曾提了个问题,名为"NewWindow2中的异常信息",原文见"http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28776",其中的错误可能就是未初始化和终止化(Initialization & Finalization)TWebBrowser控件, william所提ComObj Unit有一方法为“Initialization”,不知版主所言(CoInitialize and CoUninitialize)是何意,这Initialization & Finalization代码该如何改法(我在上文中写的代码无法运行)。
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-23 11:03:18 IP:147.8.xxx.xxx 未訂閱
OleInitialize and OleUninitialize are old methods for OLE, I think you should use CoInitialize and CoUnInitialize instead. initialization and finalization are reserved words in Delphi. In short, statements inside the initialization section will be executed when the unit is being used (i.e. program starts) while statements inside the finalization will be executed when the program quits. What I mean in previous post is: There is no need to do extra call to initialize the COM if your COM objects are created and used within the main thread, otherwise you should call CoInitialize and CoUnInitialize in your threads containing the COM objects.
wzpuma
一般會員


發表:10
回覆:19
積分:5
註冊:2003-02-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-23 15:31:45 IP:218.5.xxx.xxx 未訂閱
我看到的文章如下: 初始化和终止化(Initialization & Finalization) 大家在执行TWebBrowser的某个方法以进行期望的操作,如ExecWB等的时候可能都碰到过“试图激活未注册的丢失目标”或“OLE对象未注册”等错误,或者并没有出错但是得不到希望的结果,比如不能将选中的网页内容复制到剪贴板等。以前用它编程的时候,我发现ExecWB有时侯起作用但有时侯又不行,在 Delphi生成的缺省工程主窗口上加入TWebBrowser,运行时并不会出现“OLE对象未注册”的错误。同样是一个偶然的机会,我才知道OLE对象需要初始化和终止化(懂得的东东实在太少了)。 我用我的前一篇文章《Delphi程序窗口动画&正常排列平铺的解决》所说的方法编程,运行时出了上面所说的错误,我便猜想应该有OleInitialize之类的语句,于是,找到并加上了下面几句话,终于搞定!究其原因,我想大概是由于 TWebBrowser是一个嵌入的OLE对象而不算是用Delphi编写的VCL吧。 initialization OleInitialize(nil); finalization try OleUninitialize; except end; 这几句话放在主窗口所有语句之后,“end.”之前。 我试用ExecWB设置页面字体大小WebBrowser1.ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,t,t);果然出现“试图激活未注册的丢失目标“错误。 现问题是: (1)用了"initialization OleInitialize(nil); finalization try OleUninitialize; except end;"显视错误"Undeclared identifier:'OleInitialize'" 这OleInitialize&OleUninitialize属于哪个Unit? (2)版主所言(CoInitialize and CoUninitialize)是哪个接口的方法,该如何调用? (3)在pagecontrol控件上放了WebBrowser控件,希望点击WebBrower中的打开链接后还在该WebBrowser中显示,即产生新的tabsheet,上面有WebBrowser,显示新的网页,而不是跳出IE浏览器。后经timhuang兄和wushang兄指点,问题基本解决了。原文见 "http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26523"和“http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27072” 但运行时发现上有些网点(如"www.dragonsky.com")会出现信息"Could not obtain Ole Control window handle",且有时网页代码自动打开窗口(皆为广告条)时产生一个空白的TTabSheet。 这是否即版主所言的线程问题,须(Initialization & Finalization)?
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-23 16:09:52 IP:147.8.xxx.xxx 未訂閱
1) in Ole2 and ActiveX unit 2) You may think that CoInitialize is a newer version of OleInitialize while CoUnInitialize is a newer version of OleUnInitialize 3) no idea
系統時間:2024-04-29 16:43:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!