溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Delphi中出現(xiàn)小問題及處理

發(fā)布時間:2020-07-23 20:22:43 來源:網(wǎng)絡(luò) 閱讀:311 作者:alexanda2000 欄目:開發(fā)技術(shù)

1、尚未調(diào)用CoInitialize

Delphi中出現(xiàn)小問題及處理

這是在調(diào)用Com對象(比如ADO對象)時出現(xiàn)的錯誤,按道理Delphi應(yīng)該把這個問題自動處理好,但它就是出現(xiàn)了。所以只能自己處理。在單元文件中引用ActiveX,然后在初始和結(jié)束手動初始化和結(jié)束初始化。

initialization

CoInitialize(nil);

finalization

CoUninitialize;

另外有一點(diǎn)需要注意的是,根據(jù)MSDN:

Initializes the COM library on the current thread and identifies the concurrency model as single-thread apartment (STA).

New applications should call CoInitializeEx instead of CoInitialize.

If you want to use the Windows Runtime, you must call Windows::Foundation::Initialize instead.

這個Com庫的初始化函數(shù)只對當(dāng)前線程有效,所以如果使用了多線程,在別的線程出現(xiàn)報錯,只是手動在主線程增加初始化是沒用的,必須加在對應(yīng)的線程單元中合適的位置

以上述程序?yàn)槔?,開始的時候,將 CoInitialize(nil)加在了主窗體中,無效,因?yàn)閷ο嚓P(guān)Com的調(diào)用是在別的線程;然后加在線程文件的initialization中,出乎意料,也無效。后來思考了一下,單元文件的initialization實(shí)際上還是主線程調(diào)用的,因?yàn)檫@時我自己寫的線程還沒有啟動。最后把調(diào)用加在Execute方法里,報錯消失了。


2、被呼叫方拒絕接收呼叫

Delphi中出現(xiàn)小問題及處理

因?yàn)槭峭ㄟ^Com對象進(jìn)行操作(比如導(dǎo)出Excel),這種情況一般是由于操作過快造成的(Com的速度都比較慢),需要減緩一下操作速度。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI