您好,登錄后才能下訂單哦!
1、尚未調用CoInitialize
這是在調用Com對象(比如ADO對象)時出現的錯誤,按道理Delphi應該把這個問題自動處理好,但它就是出現了。所以只能自己處理。在單元文件中引用ActiveX,然后在初始和結束手動初始化和結束初始化。
initialization
CoInitialize(nil);
finalization
CoUninitialize;
另外有一點需要注意的是,根據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庫的初始化函數只對當前線程有效,所以如果使用了多線程,在別的線程出現報錯,只是手動在主線程增加初始化是沒用的,必須加在對應的線程單元中合適的位置。
以上述程序為例,開始的時候,將 CoInitialize(nil)加在了主窗體中,無效,因為對相關Com的調用是在別的線程;然后加在線程文件的initialization中,出乎意料,也無效。后來思考了一下,單元文件的initialization實際上還是主線程調用的,因為這時我自己寫的線程還沒有啟動。最后把調用加在Execute方法里,報錯消失了。
2、被呼叫方拒絕接收呼叫
因為是通過Com對象進行操作(比如導出Excel),這種情況一般是由于操作過快造成的(Com的速度都比較慢),需要減緩一下操作速度。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。