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

請問如何取代聯結dll檔中的事件方法

缺席
gui0710
一般會員


發表:1
回覆:0
積分:0
註冊:2009-05-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-19 14:35:15 IP:59.125.xxx.xxx 訂閱
因工作上的需求,需要使用廠商所開發的DLL檔,不過剛學習delphi語言不久,還是有些問題想向各位前輩請教
小弟所使用的工具是Delphi 2009, 透過Component ->Import Component 功能產生一個DLL_TLB檔案
於TLB檔中(其中包含許多Class)可以看到所需要產生實例的類(Class) Scanning 有三個 interface,分別宣告為

IScanning = interface(IDispatch)
IScanningDisp = dispinterface
_IscanningEvent = dispinterface

從書本與網路上找尋相關於介面的資料,雖然知道宣告定義的方法,但是對於介面還是有點不了解,從書中看到的資訊說到
如果物件所屬的類別實作為 IDispatch介面型態的內容,這個物件就稱為一個automaion物件,但是又說在程式執行時,實際上都轉到 IDispatch介面的 Invoke方法來負責執行,類別型態沒有辦法實作出 Dispatch相關型態的內容(參考至Borland Delphi4 Object Pascal 程式語言手冊)
書上也有說明到雙重介面(Dual Interface),這就找不到比較完整的資料

這邊完全弄不懂,是否可以請諸位前輩幫忙講解下這部份的關念,或是有什麼相關的範例,書與資料可以查詢?

然後,當我在程式中 Create了 Scanning後,我沒有辦法去呼叫_IscanningEvent中的任何一個事件,也無法產生實例,是否這需要透過什麼特別的方式才能達到事件的呼叫?

最後是 _IscanningEvent其中的一些事件方法,我需要用自己所寫的方法去取代原有的事件方法,有想過用傳遞自己定義的事件方法進入點指標,但是查詢網路上的資料卻沒發現相關的範例
難到 Delphi 不能夠使用指標指定的方式去變更事件方法的指標位址嗎?或是有其他的方式可以直接取代原來的事件方法?
也有試過用繼承的方式去實作物件,但是卻發現到需要宣告出所有這物件底下的方法與實作,我只需要取代部份事件方法,是我的做法錯誤呢?還是繼承本來就不能夠放棄部份不要?

請各位前輩幫忙一下我這個新手,或是提供我學習的方向,在此小弟先向大家說聲謝謝,不管怎樣也看完了這一大串,謝謝
如果還需要什麼資料的,我會在補充上來,謝謝大家
------
新手上路期間,前後左右請保持距離以免發生擦撞
系統時間:2024-11-22 22:17:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!