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

Delphi 呼叫 VB 開發的 ocx

尚未結案
sally
一般會員


發表:10
回覆:21
積分:6
註冊:2003-08-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-23 14:29:51 IP:61.222.xxx.xxx 未訂閱
請教各位先進:我的開發工具是Delphi 5.0,現在import一個以VB開發的ocx,當使用其中一個方法PMIpcClient1.Init時,需要一個參數->hWnd,在Delphi的寫法如下 hWnd := FindWindow(nil, form_name); PMIpcClient1.Init(hWnd); compile沒問題,但執行時出現如下錯誤 Project ocx_sample.exe raised exception class EOleException with message 'OLE error 800A01A9'. Process Stopped. Use Step or Run to continue. 這個訊息以前也出現過,不過錯誤情況不同,不知道是不是VB寫的ocx有什麼地方與Delphi沖到或是不合,是否有那位先進可以代為解答,謝謝!!
rexchiu
中階會員


發表:14
回覆:88
積分:70
註冊:2002-03-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-23 15:45:06 IP:61.56.xxx.xxx 未訂閱
這很可能是由於Delphi在替你的OCX產生Typelib(xxx_TLB unit)的時候,預設是 使用V-table 介面.不知道是VB或Delphi沒有處理好,以至於造成這樣的問題. 建議你用 disp 介面來取代 V-table. 以你的問題來舉例,請你找到一個 PMIpcClient1_TLB.pas的檔案. 並且去尋找_PMIpcClient1的字眼. 例如: FintF: _PMIpcClient1; Function GetControlInterface:_PMIpcClient1; property ControlInterface: _PMIpcClient1 read GetControlInterface; procedure TPMIpcClient1.CreateControl; procedure DoCreate; begin FIntf := IUnknown(OleObject) as _PMIpcClient1; end; begin if FIntf = nil then DoCreate; end; function TPMIpcClient1.GetControlInterface: _PMIpcClient1; begin CreateControl; Result := FIntf; end; 將以上這幾個地方的_PMIpcClient1用_PMIpcClient1Disp加以取代. 然後在編譯一次,如果沒法編譯成功,就把錯誤訊息中的_PMIpcClient1全部 換成_PMIpcClient1Disp在編譯一次應該就可以了. 要注意的事情是,你最好把改過這個PMIpcClient1_TLB.pas找個另外的地方存起來. 因為每次當你要re-import的時候.Delphi又會幫你產生一個PMIpcClient1_TLB.pas這樣會蓋掉你之前改的. 大概就是這樣,試試看吧~~ P.S 你真的是42歲的女生喔?? Best Regards, Rex Chiu 發表人 - rexchiu 於 2004/04/23 15:46:52
------
Best Regards,
Rex Chiu
sally
一般會員


發表:10
回覆:21
積分:6
註冊:2003-08-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-23 17:34:53 IP:61.222.xxx.xxx 未訂閱
Hi,Rex:謝謝您詳盡的答覆,但仍有疑問要向您請教,"IID__PMIpcClient"、"DIID___PMIpcClient"、"CLASS_PMIpcClient"是否也要修改?另,"_PMIpcClient = interface;"、"_PMIpcClientDisp = dispinterface;"、"__PMIpcClient = dispinterface;"也要改嗎?若是,則"_PMIpcClientDisp"會造成重覆的錯誤!麻煩您了,謝謝!
rexchiu
中階會員


發表:14
回覆:88
積分:70
註冊:2002-03-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-23 17:43:43 IP:61.56.xxx.xxx 未訂閱
基本上就是改我上面列出來的那幾項,應該就可以了!! Best Regards, Rex Chiu
------
Best Regards,
Rex Chiu
sally
一般會員


發表:10
回覆:21
積分:6
註冊:2003-08-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-23 18:17:50 IP:61.222.xxx.xxx 未訂閱
Hi,Rex:照您的建議修改,另外再根據編譯錯誤修改其他部份,直到編譯成功為止,但好景不常,執行時仍發生同樣錯誤訊息(... 800A01A9....),您還有其他建議嗎?謝謝!!
rexchiu
中階會員


發表:14
回覆:88
積分:70
註冊:2002-03-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-28 10:19:21 IP:211.74.xxx.xxx 未訂閱
引言: Hi,Rex:照您的建議修改,另外再根據編譯錯誤修改其他部份,直到編譯成功為止,但好景不常,執行時仍發生同樣錯誤訊息(... 800A01A9....),您還有其他建議嗎?謝謝!!
這樣我就不知道確切的原因囉~~ 建議你把部分個程式碼貼上來..嗯...貼稍微完整一點的..這樣比較好幫你找問題. Best Regards, Rex Chiu
------
Best Regards,
Rex Chiu
william
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-28 10:36:39 IP:147.8.xxx.xxx 未訂閱
sally
一般會員


發表:10
回覆:21
積分:6
註冊:2003-08-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-30 15:18:07 IP:61.222.xxx.xxx 未訂閱
謝謝Rex,William二位的指教,不過基本上我所得到的資訊和二位的提供應該是同一出處,就是很奇怪,編譯可以過,執行卻還是有錯。另外,ocx原始程式是由同事開發,這裡實在不方便提供,這也是讓我覺得困擾之處。只有再等看是否還有其他先進能提供不同的意見,謝謝!!
系統時間:2024-09-08 19:06:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!